我有以下问题:
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有人能帮我找到解决办法吗?
发布于 2015-06-17 08:40:56
funcy是指向成员函数的指针,因此需要对类的实例调用它,如下所示:
(this->*funcy)(items,i);发布于 2015-06-17 08:46:29
非静态成员函数的问题是,它们有一个不可见的第一个参数,编译器将在成员函数中转换为this。这意味着,如果没有对象实例来调用成员函数,就不能调用(非静态)成员函数。
在您的情况下,如果您想使用this对象调用LoopFunction,您需要这样做。
(this->*funcy)(items, i);如果要在另一个对象实例上调用它,则需要将该对象传递给该函数,并使用该对象。
或者您可以使用例如std::function和std::bind来代替成员函数指针。或者使用类似于标准库处理回调的模板参数,并允许您将任何可调用的对象传递给函数(但是,如果您想使用非静态成员函数,仍然必须使用std::bind )。
https://stackoverflow.com/questions/30886420
复制相似问题