मुझे पता है कि यह कई बार पूछा गया है, और इसकी वजह से क्रॉफ्ट के माध्यम से खुदाई करना और क्या काम करता है इसका एक सरल उदाहरण मिल सकता है।
मुझे यह मिल गया है, यह सरल है और यह काम करता है MyClass
...
#include <iostream>
using std::cout;
using std::endl;
class MyClass
{
public:
MyClass();
static void Callback(MyClass* instance, int x);
private:
int private_x;
};
class EventHandler
{
public:
void addHandler(MyClass* owner)
{
cout << "Handler added..." << endl;
//Let's pretend an event just occured
owner->Callback(owner,1);
}
};
EventHandler* handler;
MyClass::MyClass()
{
private_x = 5;
handler->addHandler(this);
}
void MyClass::Callback(MyClass* instance, int x)
{
cout << x + instance->private_x << endl;
}
int main(int argc, char** argv)
{
handler = new EventHandler();
MyClass* myClass = new MyClass();
}
class YourClass
{
public:
YourClass();
static void Callback(YourClass* instance, int x);
};
कैसे कि इतने में लिखा जा सकता EventHandler::addHandler()
दोनों के साथ काम करेंगे MyClass
और YourClass
। मुझे क्षमा करें, लेकिन यह मेरे मस्तिष्क के काम करने का तरीका है, मुझे यह समझने का एक सरल उदाहरण देखने की आवश्यकता है कि इससे पहले कि मैं काम करता हूं / यह कैसे काम करता है। यदि आपको इस काम को करने का पसंदीदा तरीका मिल गया है तो इसे दिखाने का समय है, कृपया उस कोड को चिह्नित करें और उसे वापस पोस्ट करें।
[संपादित करें]
इसका उत्तर दिया गया था लेकिन चेकमार्क देने से पहले उत्तर को हटा दिया गया था। मेरे मामले में जवाब एक अस्थायी कार्य था। इसमे एडहैंडलर को बदला गया ...
class EventHandler
{
public:
template<typename T>
void addHandler(T* owner)
{
cout << "Handler added..." << endl;
//Let's pretend an event just occured
owner->Callback(owner,1);
}
};