我有一个接收对象实例和函数指针的函数。如何在对象实例上执行函数指针?
我试过了:
void Myclass::my_fn(Object obj, bool (*fn)(std::string str))
{
obj.fn("test"); // and (obj.fn("test"))
}
但没有任何作用。它告诉我“未使用的参数my_fn和fn”
答案 0 :(得分:4)
这是因为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
,您还可以使用其他函数指针或lambdas:
myclassobject.my_fn([](std::string s){ std::cout << s << '\n'; return true; });
答案 1 :(得分: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");
}