【发布时间】:2013-08-13 04:01:00
【问题描述】:
我想使用 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。 感谢您的帮助。
【问题讨论】:
-
myInstance.myMethod 使用此调用并且不是 int() 类型。
-
对不起,我没明白,你能解释一下吗?
-
myMethod 取决于它使用它的实例,并隐式地将实例的“this”指针作为参数,这就是它的签名不是 int() 的原因。我发布了一个答案,该答案使用 std::bind 将实例绑定到使其可作为 int() 调用的方法
标签: c++ visual-c++ c++11 lambda