前提
C++ (G++ / std=C++11)
実現したいこと
・親クラスのメンバ関数をコールバック関数として子クラスから呼び出したい。
発生している問題・エラーメッセージ
・メンバ関数のポインタを渡すことができない。
具体的には
コンパイラで
「_child.SetCallback(this->callback); // メンバ関数を渡したい」
の行で
「error: invalid use of non-static member function」
が出力されてしまいます。
・staticにすることで渡せるようになるが、コールバック関数内でメンバ変数にアクセスするので要件に合わない。
該当のソースコード
/* === 親クラス === */
class Oya
{
public:
Oya()
{
_child = new Child();
_child.SetCallback(this->callback); // メンバ関数を渡したい
}
~Oya();
private:
Child *_child;
int _n;
void callback(int x)
{
_n = _n + x;
}
}
/* === 子クラス === */
class Child
{
public:
Child();
~Child();
void SetCallback(void (*func)(int))
{
_callback = func;
}
private:
void event(int x) // 外部ライブラリからコールバックされるイベント関数
{
(*_callback)(x); // コールバック経由で親に渡したい
}
}
回答3件