函数指针不是函数或函数指针

function pointer is not a function or function pointer

本文关键字:函数 指针      更新时间:2023-10-16

我有以下问题:

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

谁能帮我找到解决方案?

funcy 是指向成员函数的指针,因此您需要在类的实例上调用它,如下所示:

(this->*funcy)(items,i);

非静态成员函数的问题是它们有一个不可见的第一个参数,编译器将在成员函数中将其转换为this。这意味着,如果没有要调用成员函数的对象实例,则无法调用(非静态)成员函数。

在您的情况下,如果您想使用 this 对象在 LoopFunction 中调用它,您需要执行以下操作,

例如
(this->*funcy)(items, i);

如果要在另一个对象实例上调用它,则需要将该对象传递给函数,并改用该函数。

或者您可以使用例如 std::functionstd::bind,而不是成员函数指针。或者使用类似于标准库处理回调的方式的模板参数,它允许您将任何可调用对象传递给函数(如果您想使用非静态成员函数,仍然必须使用 std::bind)。