2014-01-20 44 views
0
接收的對象上的函數指針

我有一個接收對象實例和函數指針的函數。我如何在我的對象實例上執行我的函數指針?由參數

我曾嘗試:

void Myclass::my_fn(Object obj, bool (*fn)(std::string str)) 
{ 
    obj.fn("test"); // and (obj.fn("test")) 
} 

但沒有任何工程。它告訴我「未使用的參數my_fn和fn」

回答

4

這是因爲fn不是成員函數指針Object。爲此,你必須做

bool (Object::*fn)(std::string) 

然後調用它,你需要做的

(obj.*fn)(...); 

但是,如果你的編譯器和庫可以支持C++ 11,我建議你使用std::functionstd::bind

void MyclasS::my_fn(std::function<bool(std::string)> fn) 
{ 
    fn("string"); 
} 

然後調用my_fn函數爲

using namespace std::placeholders; // For `_1` below 

Object obj; 
myclassobject.my_fn(std::bind(&Object::aFunction, &obj, _1)); 

隨着std::function你也可以使用其它的函數指針或lambda表達式:

myclassobject.my_fn([](std::string s){ std::cout << s << '\n'; return true; }); 
0

函數指針是完全不同的東西形式的成員函數指針(指向方法)。

在函數指針的情況下,你不需要任何對象給他們打電話:

void Myclass::my_fn(bool (*fn)(std::string str)) 
{ 
    fn("test"); 
} 

在成員函數指針的情況下,正確的語法是:

void Myclass::my_fn(Object obj, bool (Object::*fn)(std::string str)) 
{ 
    obj.*fn("test"); 
}