我一直在玩C++中的函数指针,似乎发现了一个问题。我做了一个演示,以在一个简单的示例中重现该错误。

我有头文件

class MyClass
{
public:
    void MyFunction(int i);
    MyClass();
    ~MyClass();
};

和cpp文件
#include "MyClass.h"
#include <iostream>
#include <functional>
using namespace std;

MyClass::MyClass()
{
    //doesn't work
    function<void(int)> func = &MyClass::MyFunction;
}

void MyClass::MyFunction(int i)
{
    cout << i << endl;
}

在cpp文件的构造函数中,我试图创建一个指向MyFunction的指针。它在第506行的功能文件中给出了错误error C2664: 'void std::_Func_class<_Ret,int>::_Set(std::_Func_base<_Ret,int> *)' : cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,int> *'。使用无参数方法可以正常工作,但不能使用它们。有谁知道为什么,以及如何解决它?

最佳答案

您可以使用this并将正在构造的对象绑定(bind)到该函数。例如,如果您的构造函数如下所示:

MyClass::MyClass()
{
    function<void(int)> func = bind(&MyClass::MyFunction, this, placeholders::_1);
    func(6);
}

您创建了一个MyClass实例:
MyClass instance;

然后6将被打印到stdout。

10-06 10:45
查看更多