指定されたクラスのメンバー関数だけでなく、任意のメンバー関数を指すことができる関数ポインターを定義するのが困難です。
たとえば、C++ では、メンバー関数への関数ポインターが指すクラスを指定する必要があります。
typedef void (Foo::*MyFunctionPointerTypeName)(int);
しかし、この関数ポインターが指すクラス メンバー関数が にない場合はどうなるFoo
でしょうか? では、これをどのように書くか、またはどの代替アプローチを使用できますか?
更新: C++ 11 でこれを達成する方法についての簡単な回答を探している人向け std::function
(このテーマに関するチュートリアルは多くの読者を想定しているようです):
定義 (内からFoo
):
std::function<void(int)> _fun;
バインディング (任意のクラスから):
objFoo->_fun = std::bind(&SomeOtherClass::memberFunction,
this, std::placeholders::_1);
それを呼び出す(内からFoo
)
if(_fun != nullptr) _fun(42);
関数にパラメーターがない場合は、 を削除できますstd::placeholders::_1
。また、関数に 2 つのパラメーターがある場合は、パラメーターとしてにも追加する 必要があります。3 つのパラメーター、4 つのパラメーターなどについても同様です。std::placeholders::_2
std::bind