これは何度も尋ねられたことがわかっています。そのため、塊を掘り起こして簡単な例を見つけるのは難しいです。C++クラスメンバコールバックの簡単な例
私はこれを持って、...
#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
の両方で動作します書き換えることができる。それはシンプルだし、MyClass
のために働きます。申し訳ありませんが、それは私の脳が働く方法です。私はそれがなぜ/どのように機能するかを理解する前に、何がうまくいくかの簡単な例を見る必要があります。この作品を好きなように作って、それを見せる時間があるなら、そのコードをマークアップして戻してください。
[編集]
それが答えましたが、私はチェックマークを与えることができる前に答えが削除されました。 私の場合、答えはテンプレート機能でした。 addHandlerをthisに変更しました...
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);
}
};
誰がテンプレート関数の例を投稿しましたか?あなたはチェックマークがありますが、私がテストしている間にあなたの答えを削除しました。それはまさに私が必要としたことでした。シンプルな関数テンプレートは、私が読んでいた他のすべての情報のシチューで失われました。あなたの答えは質問の編集として追加されました。 – BentFX
私はそれがJaredCだと思います。あなたは彼を狩る必要があるかもしれない= P – WhozCraig