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

C++ 在C+中存储对方法的引用时出错+;11,c++,visual-c++,c++11,lambda,C++,Visual C++,C++11,Lambda,我想使用lambda函数,但我有一个问题: 如果要将对“全局范围”中声明为std::function的函数的引用存储为std::function,则没有问题: int myFunction() { return 665; } int main() { function<int()> functionRef = myFunction; //This works } int myFunction() { 返回665; } int main() { function fu

我想使用lambda函数,但我有一个问题:

如果要将对“全局范围”中声明为std::function的函数的引用存储为std::function,则没有问题:

int myFunction()
{
    return 665;
}
int main()
{
    function<int()> functionRef = myFunction; //This works
}
int myFunction()
{
返回665;
}
int main()
{
function functionRef=myFunction;//这是可行的
}
如果要执行相同操作,但要存储对方法的引用,请执行以下操作:

//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?
}
//一个类
类myClass
{
公众:
int myMethod()
{
返回666;
}
};
//我创建一个实例:
myClass myInstance;
int main()
{
function functionRef2=myInstance.myMethod;//这不起作用……为什么?
}
给我这个错误:

错误C3867:'myClass::myMethod':函数调用缺少参数列表;使用“&myClass::myMethod”创建指向成员的指针

我知道在调用没有“()”的函数时会发生错误,但在这种情况下我不会调用函数。只是把它存储在一个变量上。 我使用Visual C++ 2010。
谢谢您的帮助。

myClass::myMethod的类型是
int(myClass::*)()
,这与
int(*)(

你能用的是

function<int()> functionRef2 = std::bind(&myClass::myMethod, &myInstance);
函数functionRef2=std::bind(&myClass::myMethod,&myInstance);

作为
绑定的替代方案,您可以使用lambda:

function<int()> functionRef2 = [&](int n){ return myInstance.myMethod(n); };
函数functionRef2=[&](int n){return myInstance.myMethod(n);};

myInstance.myMethod使用此调用,并且不是int()类型。很抱歉,我不明白,您能再解释一下吗?myMethod取决于它使用的实例,并隐式地将实例的“this”指针作为参数,这就是它的签名不是int()的原因。我发布了一个答案,它使用std::bind将实例绑定到方法,使其可以作为int()调用,非常感谢您的帮助!。现在我还有一个问题:我可以在第一个例子中使用bind函数吗?替换此:“函数functionRef=myFunction;”使用类似的东西?:std::bind(&myFunction,&myFunction);是的,您可以执行如下操作:std::bind(myFunction);查看std::bind文档以了解其工作原理,您可以使用它做更多的事情