2011-12-24 26 views
0

私はメンバとして関数ポインタを持つクラスを持っています。あるケースでは、そのポインタが関数オブジェクトを指すようにしたいと思いますが、それは可能ではありませんか?メンバ関数関数オブジェクトへのポインタ

class C { 
public: 
    C(); 
private: 
    void (*p)(); 
    struct Functor { 
     void operator()() { 
     } 
    }; 
}; 

C::C() : p(Functor()) { 
} 

int main(int argc, char **argv) { 
    C c; 
} 

私が取得:

t.cpp: In constructor 'C::C()': 
Line 12: error: cannot convert 'C::Functor' to 'void (*)()' in initialization 
+0

によって定義されています。なぜそれをすることができると期待していますか? – curiousguy

答えて

4

いいえ、それは不可能です。 Functorのタイプは、タイプvoid(*)()にも近くありません。あなたはタイプFunctorであるとメンバーpを変更、または何あなたが探しすることができることはstd::functionであることができ、次のいずれか

std::functionは、汎用の多型関数のラッパーです。 std :: functionのインスタンスは、呼び出し可能なターゲット関数、ラムダ式、バインド式、または他の関数オブジェクトを格納、コピー、および呼び出すことができます。

1

いいえ、Functorオブジェクトは関数ポインタではありません。 pをFunctorとして初期化したい場合は、それを次のように宣言する必要があります。

class C { 
public: 
    C(); 
private: 
    struct Functor { 
     void operator()() { 
     } 
    } p; 
}; 
関連する問題