2016-12-07 11 views
0

:A.cppでメンバー関数ポインタの配列

class A 
{ 
    typedef void (A::*fp)(); 
    void test1(); 
    void test2(); 
    A(int a); 
} 

私が持っている:

A::A(int a) 
{ 
    fp fpointers[] = {&A::test1,&A::test2}; 

    fpointers[a](); 
} 
void A::test1() 
{ 
//do something 
} 
void A::test2() 
{ 
//do something 
} 

これは私が持っているものの削減と簡素化されたバージョンです。しかし、問題はまだ有効です。私の謙虚な経験から、「fpointers」は関数ポインタの配列を定義し宣言する方法です。私は間違って

expression preceding parentheses of apparent call must have (pointer-to-) function type

は何をやっている:私は、私はこのエラーを取得していますラインfpointers[a]();に問題があるのでしょうか?あなたがインスタンスを必要とするよう

+0

@ user4581301ええ、それを修正します。ありがとう。 – user1806687

+0

トピックを外してください:['std :: function'を見てください。](http://en.cppreference.com/w/cpp/utility/functional/function)ランタイムのオーバーヘッドを少し増やしますが、メソッドポインタの構文特に[lambda expressions](http://en.cppreference.com/w/cpp/language/lambda)と['std :: bind'](http://en.cppreference.com/w/cpp/)に興味がありますユーティリティ/機能/バインド)。 – user4581301

+0

@ user4581301ありがとうございます:-) – user1806687

答えて

2

構文は

(this->*fpointers[a])(); 

だろう。

+0

ありがとうございました! :-) – user1806687

関連する問題