আমি জানি এটি অনেক বার জিজ্ঞাসা করা হয়েছে, এবং এর কারণে ক্রাফ্টের মাধ্যমে খনন করা এবং কী কাজ করে তার একটি সাধারণ উদাহরণ খুঁজে পাওয়া শক্ত।
আমি এটি পেয়েছি, এটি সহজ এবং এটি 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);
}
};