在C ++ 11中存储对方法的引用时出错

时间:2013-08-11 21:28:53

标签: c++ visual-c++ c++11 lambda

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

2 个答案:

答案 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); };