यहां हमारे कोडबेस से एक उदाहरण है। इसे सरलीकृत किया गया है, इसलिए मैं guarentee नहीं है कि यह संकलित होगा, लेकिन यह करीब होना चाहिए। Sublocation आपकी कक्षा ए है, और स्लॉट 1 आपकी कक्षा बी है। हमारे पास इस तरह के कई स्लॉट हैं, प्रत्येक जो सिग्नल के एक अलग सबसेट की सदस्यता लेता है। इस योजना का उपयोग करने के फायदे यह हैं कि सुब्बोकेशन किसी भी स्लॉट के बारे में कुछ भी नहीं जानता है, और स्लॉट को किसी भी विरासत पदानुक्रम का हिस्सा होने की आवश्यकता नहीं है, और केवल उन स्लॉट्स के लिए कार्यक्षमता लागू करने की आवश्यकता है जिनकी वे परवाह करते हैं। हम इसका उपयोग एक बहुत ही सरल इंटरफ़ेस के साथ हमारे सिस्टम में कस्टम कार्यक्षमता जोड़ने के लिए करते हैं।
Sublocation.h
class Sublocation
{
public:
typedef boost::signal<void (Time, Time)> ContactSignal;
typedef boost::signal<void()> EndOfSimSignal;
void endOfSim();
void addPerson(Time t, Interactor::Ptr i);
Connection addSignalContact(const ContactSignal::slot_type& slot) const;
Connection addSignalEndOfSim(const EndOfSimSignal::slot_type& slot) const;
private:
mutable ContactSignal fSigContact;
mutable EndOfSimSignal fSigEndOfSim;
};
Sublocation.C
void Sublocation::endOfSim()
{
fSigEndOfSim();
}
Sublocation::Connection Sublocation::addSignalContact(const ContactSignal::slot_type& slot) const
{
return fSigContact.connect(slot);
}
Sublocation::Connection Sublocation::addSignalEndOfSim(const EndOfSimSignal::slot_type& slot) const
{
return fSigEndOfSim.connect(slot);
}
Sublocation::Sublocation()
{
Slot1* slot1 = new Slot1(*this);
Slot2* slot2 = new Slot2(*this);
}
void Sublocation::addPerson(Time t, Interactor::Ptr i)
{
// compute t1
fSigOnContact(t, t1);
// ...
}
Slot1.h
class Slot1
{
public:
Slot1(const Sublocation& subloc);
void onContact(Time t1, Time t2);
void onEndOfSim();
private:
const Sublocation& fSubloc;
};
Slot1.C
Slot1::Slot1(const Sublocation& subloc)
: fSubloc(subloc)
{
subloc.addSignalContact(boost::bind(&Slot1::onContact, this, _1, _2));
subloc.addSignalEndSim(boost::bind(&Slot1::onEndSim, this));
}
void Slot1::onEndOfSim()
{
// ...
}
void Slot1::onContact(Time lastUpdate, Time t)
{
// ...
}
क्या फ़ंक्शन को अधिभारित करना संभव है, और यदि ऐसा है, तो क्या आप इसे जोड़ना चाहेंगे। s.t. आपके पास PrintNum (int) जैसा कुछ है; और प्रिंटनम (फ्लोट); – pyInTheSky
@pyInTheSky फ़ंक्शन प्रकार का उपयोग करें (सटीक अवधि के बारे में सुनिश्चित नहीं है): '(शून्य (*) (int)) और PrintNum' – Qix