実行時に関数ポインタを設定したい。しかし、私はここで立ち往生しています。グローバル関数または静的クラスメンバー関数を使用すると、すべて問題ありません。ただし、関数が通常のクラスメンバー関数の場合。私はいつもコンパイラエラーが発生しました。コードは次のとおりです。
class A
{
int val;
public:
A() { val = 0; }
A(int j) { val = j; }
int aFun(int k) {val -= k; return val; }
};
typedef int (* func)(int );
class B
{
func m_addr;
public:
B(func param)
: m_addr(param)
{
}
void execute()
{
cout << m_addr(9) << endl;
}
};
私はこれらを次のように使用しようとしています:
/ *エラーC2355:'this':非静的メンバー関数内でのみ参照できますエラーC2064:用語は1つの引数を取る関数に評価されませんクラスは'operator()'またはユーザー定義の変換演算子を定義しません適切な数の引数を取る関数へのポインタまたは関数への参照*/
A a;
B b(A::aFun);
b.execute();
たくさんググった後、私はそれstd::mem_fun
が役立つかもしれないと思いました。でも使い方がわかりません。誰かが私を助けることができますか?
PS:Visual C++2010を使用しています