我有一個接收對象實例和函數指針的函數。我如何在我的對象實例上執行我的函數指針?由參數
我曾嘗試:
void Myclass::my_fn(Object obj, bool (*fn)(std::string str))
{
obj.fn("test"); // and (obj.fn("test"))
}
但沒有任何工程。它告訴我「未使用的參數my_fn和fn」
我有一個接收對象實例和函數指針的函數。我如何在我的對象實例上執行我的函數指針?由參數
我曾嘗試:
void Myclass::my_fn(Object obj, bool (*fn)(std::string str))
{
obj.fn("test"); // and (obj.fn("test"))
}
但沒有任何工程。它告訴我「未使用的參數my_fn和fn」
這是因爲fn
不是成員函數指針Object
。爲此,你必須做
bool (Object::*fn)(std::string)
然後調用它,你需要做的
(obj.*fn)(...);
但是,如果你的編譯器和庫可以支持C++ 11,我建議你使用std::function
和std::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; });
函數指針是完全不同的東西形式的成員函數指針(指向方法)。
在函數指針的情況下,你不需要任何對象給他們打電話:
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");
}