2017-05-20 4 views
0

それは私がやろうとしていることです:私は、関数のポインタであるクラスのメンバー(attribute)を持っています。作成者では、同じクラスのいくつかのメソッドをそのポインタに割り当てる必要があります(いくつかの条件に依存します)。例えば:私はコードブロックでこのコードをコンパイルするとC++:メソッドを同じクラスのfunction-pointer-member(atribute)にアサインすることは可能でしょうか?

class monton 
{ 
private: 
protected: 

    bool (*comparador)(int a, int b); 

    inline bool mayor(int a, int b) {return a > b;} 
    inline bool menor(int a, int b) {return a < b;} 
    ... 

public: 
    monton (bool maximo = true) 
    { 
    if(maximo) comparador = mayor; 
    else  comparador = menor; 
    } 
    ... 
}; 

、私はこのエラーを取得する:

error: cannot convert ‘monton::mayor’ from type ‘bool (monton::)(int, int)’ to type ‘bool (*)(int, int)’| 

答えて

1

このエラーは、非静的メンバ関数へのポインタを代入しようとしていることを示しています通常の関数ポインタ型の変数。正しいポインタの宣言は次のようになります。

bool (monton::*comparador)(int a, int b); 
// or even better with type alias 
using t_ComparadorPointer = bool (monton::*)(int a, int b); 
t_ComparadorPointer comparador; 
+0

どうもありがとうございました。私はまた、私の関数ポインタを使用するために問題を抱えていた。しかし、私はこのsintaxでそれを使うことができることを発見した: '(this - > * comparador)(x、y)' –

+0

そして私はポインタをこのsintaxに置き換えなければならなかった: 'comparador =&monton :: mayor;' 私はそれが正しいか適切か、それとも将来の問題を作り出しているのだろうかと思います。どうもありがとう。 –

+0

これらの関数の性質(どのような方法でもクラスインスタンスに依存しない)が与えられれば、それらを静的にする方が良いでしょう - そして関数ポインタに代入することができます。 –

関連する問題