2011-12-24 60 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 2011-12-24 04:05:07

回答

4

不,這是不可能的。 Functor的類型甚至不是接近void(*)()的類型。您可以更改成員pFunctor類型的,或者你也可以尋找的是std::function

std::function是一個通用的多態函數包裝。 std :: function的實例可以存儲,複製和調用任何可調用的目標函數,lambda表達式,綁定表達式或其他函數對象。

1

不,函數對象不是函數指針。如果你想初始化p作爲函子,你應該這樣聲明:

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