2017-04-17 8 views
0

変数に渡されたオブジェクトメソッドを呼び出す方法は?オブジェクトメソッドを変数に渡す

class A { 
public: 
    inline int f() { 
     return 1; 
    } 
}; 


int main() { 
    A a; 

    int (A::*y)(); //'y' must be a method of 'A' class that returns 'int' 
    y = &A::f; //bind 'f' method 

    *y(); //how to invoke??? 
} 

threadは、オブジェクトフィールドにメソッドをバインドし、それがこのよう(a.*(a.x))()呼び出されましたが、私は単純な変数と同様のことを行うための方法を見つけることができません。

答えて

2

(a.*y)();と入力してください。あなたは、関数呼び出しを行う前に、コンパイラがメンバへのポインタを解決するように余分なparanthesesを必要とします。 operator precedenceを参照してください:

class A { 
public: 
    inline int f() { 
     return 1; 
    } 
}; 


int main() { 
    A a; 

    int (A::*y)(); //'y' must be a method of 'A' class that returns 'int' 
    y = &A::f; //bind 'f' method 

    (a.*y)(); 
} 

Demo

+0

それは働きました!ありがとうございました。 – Humberd

+0

変数 'y'に渡された関数の名前(この場合は' f')を得るにはどうしたらいいですか? – Humberd

+1

@Humberd、移植性のある簡単な方法はありません。現在の手段は 'std :: type_info'です。これはあなたが望む名前を与えません。いくつかのリフレクション提案がC++ 20のためにスケールアップされることを願っています:...-) – WhiZTiM

関連する問題