私はメンバー関数へのポインターに不慣れであり、それらの長所と短所を知りたいです。
具体的には、次のことを考慮してください。
#include <iostream>
#include <list>
using namespace std;
class VariableContainer;
class Variable
{
public:
Variable (int v) : value (v), cb_pointer (0) {}
~Variable () {}
void SetCallback (void (VariableContainer::*cb)(int)) {
cb_pointer = cb;
}
void FireCallback (void) {
/* I need a reference to a VariableContainer object! */
}
private:
int value;
void (VariableContainer::*cb_pointer) (int);
};
class VariableContainer
{
public:
VariableContainer () {}
~VariableContainer () {}
void AddVar (Variable &v) {
v.SetCallback (&VariableContainer::Callback);
}
void Callback (int v) { cout << v << endl; }
};
int main ()
{
Variable v (1);
VariableContainer vc;
vc.AddVar (v);
v.FireCallback();
return 0;
}
コメントで述べられているように、コールバック(FireCallback
)をトリガーするには、既存のVariableContainer
オブジェクトへの参照が必要です。これは、の追加の引数として提供する必要がありますVariableContainer::AddVar (...)
。今:
- メンバー関数へのポインターを使用する必要がありますか?または、直接呼び出す必要がありますか
Callback (...)
(オブジェクトへのポインターがあるためVariableContainer
)? - 各ソリューションの長所と短所は何ですか?
TIA、ジル