我有以下问题:
void MyClass::LoopFunction(vector<Item>& items,void (MyClass::*funcy)(vector<Item>&,int))
{
for(SInt32 i = 0; i < 50; i++)
{
funcy(items,i);
}
}
它说:
Called object type 'void(MyClass::*)(vector<Item>&,int)' is not a function or function pointer
任何人都可以帮我找到解决方案吗?
答案 0 :(得分:5)
funcy
是指向成员函数的指针,因此您需要在类的实例上调用它,如下所示:
(this->*funcy)(items,i);
答案 1 :(得分:2)
具有非静态成员函数的东西是它们有一个不可见的第一个参数,编译器将在成员函数内变成this
。这意味着如果没有对象实例来调用成员函数,则无法调用(非静态)成员函数。
在您的情况下,如果您想使用this
objectinside LoopFunction
进行调用,则需要执行此操作。
(this->*funcy)(items, i);
如果要在另一个对象实例上调用它,则需要将该对象传递给该函数,然后使用该对象。
或者你可以使用例如std::function
和std::bind
而不是成员函数指针。或者使用类似于标准库处理回调的模板参数,并允许您将任何可调用对象传递给函数(如果要使用,则仍需使用std::bind
虽然非静态成员函数。