1

我想使用 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。感谢您的帮助。

4

2 回答 2

1

myClass::myMethodis和 this的类型int (myClass::*)()不同int(*)()

你可以使用的是

function<int()> functionRef2 = std::bind(&myClass::myMethod, &myInstance);
于 2013-08-11T21:35:13.293 回答
1

作为 的替代方法bind,您可以使用 lambda:

function<int()> functionRef2 = [&](int n){ return myInstance.myMethod(n); };
于 2013-08-11T22:07:02.780 回答