Aには多くのBクラスがあり、クラスAには1つのオブジェクトbがあります。このオブジェクトbには、Aのオブジェクトのメソッドへのポインタを必要とする関数(calc)があります。このメソッド(fun)は、クラスのprivate変数にアクセスします(私の例では3を返します)。C++のクラスメソッドへのポインタ
class A;
class B {
public:
virtual int calc (int (A::*fun)()) { return 2*fun(); };
};
class A {
B* b;
public:
A (B* b_) : b (b_) {};
int fun() { return 3; };
int run(){ return b->calc(&A::fun); };
};
int main() {
B* b = new B();
A a(b);
a.run();
return 0;
}
どのように私はクラスBでcalc
メソッドの定義では正しくメソッドへのポインタを使用することができますか?あなたがC++ 11を使用することができます場合は
teste.cpp:10:58: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘fun (...)’, e.g. ‘(... ->* fun) (...)’
virtual int calc (int (A::*fun)()) { return 2*fun(); };
^
非静的メンバー関数へのポインタは、実際には楽しいですが、そのようなものでは動作しません。私はstd :: functionを調べるだろう – UKMonkey
なぜCの答えはC++の質問の重複としてリンクされていますか?メンバー関数を呼び出すことは、C言語の関数を呼び出すことと同じではありません。 – wally
私はこれがより重複していると信じています。https://stackoverflow.com/questions/12662891/passing-a-member-function-as-an-argument-in- c – UKMonkey