我正在尝试将特定类实例的方法作为参数发送到函数(foo),尽管我不断收到此错误
无效使用非静态成员函数...
(来自行 foo(a-> bar))
我不确定为什么会收到此错误?它有可能解决吗?
#include <iostream>
#include <functional>
void foo(std::function<void(void)> _func)
{
_func();
}
class A
{
public:
A()
{
x = 5;
}
void bar()
{
std::cout << x << std::endl;
}
private:
int x;
};
int main() {
A a;
foo(a->bar);
return 0;
}
答案 0 :(得分:5)
答案 1 :(得分:0)
你的方法与std :: function不兼容,即使它看起来像。 每个方法都有一个隐含的第一个参数,即。
所以你的签名看起来像这样
void bar(A* this) { /* ... */ }
静态方法不是这种情况。这些类似于类的命名空间中的函数和
static void bar() { /* ... */ }
将使std :: function饱和。
尽管如此,使用lambda(c ++ 11)很可能是更好的方法。