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

标签 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”:函数调用缺少参数列表;使用 '&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/

相关文章:

c++ - lambda 可以有 "C"链接吗?

c++ - 是否有 C++ 库来创建强大的枚举?

c++ - 使用 MsgPack 通过 ZeroMQ (zmqpp) 发送数据给出 'msgpack::v1::insufficient_bytes' 错误

c++ - C++底层工作中的迭代器

c++ - 从堆栈指针中找出函数参数值

c++ - 使用 SFINAE 检测模板化成员函数的存在

c++ - 双变量 字符变量

c++ - Vc++(Wince平台)如何打开读取16位.raw文件

c++ - 在静态库中调用 main 之前的函数

c++ - 如何提示 Visual C++ 编译器优化器不太可能执行 if 语句的特定分支?