我想使用lambda函数但我有一个问题:
如果我想将对“全局作用域”中声明的函数的引用存储为std :: function,则没有问题:
int myFunction()
{
return 665;
}
int main()
{
function<int()> functionRef = myFunction; //This works
}
如果我想这样做但存储对方法的引用:
//A class
class myClass
{
public:
int myMethod()
{
return 666;
}
};
//I create an instance:
myClass myInstance;
int main()
{
function<int()> functionRef2 = myInstance.myMethod; //This doesn't work... why?
}
给我这个错误:
错误C3867:'myClass :: myMethod':函数调用缺少参数列表;使用'&amp; myClass :: myMethod'创建指向成员的指针
我知道在没有“()”的情况下调用函数时会发生错误,但在这种情况下我没有调用函数。只需将其存储在变量上。 我正在使用Visual C ++ 2010。 谢谢你的帮助。
答案 0 :(得分:1)
myClass::myMethod
的类型为int (myClass::*)()
,这与int(*)()
不同
您可以使用的是
function<int()> functionRef2 = std::bind(&myClass::myMethod, &myInstance);
答案 1 :(得分:1)
作为bind
的替代方案,您可以使用lambda:
function<int()> functionRef2 = [&](int n){ return myInstance.myMethod(n); };