我想使用 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”:函数调用缺少参数列表;使用 '&myClass::myMethod' 创建指向成员的指针
我知道在调用不带“()”的函数时会发生错误,但在这种情况下我不会调用函数。只是将它存储在一个变量上。 我正在使用 Visual C++ 2010。 感谢您的帮助。
最佳答案
myClass::myMethod
的类型是int (myClass::*)()
,这与int(*)()
你可以使用的是
function<int()> functionRef2 = std::bind(&myClass::myMethod, &myInstance);
关于c++ - 在 C++11 中存储对方法的引用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176873/