类中的 std::function 设置为包含第一个类的类中的函数

Kau*_*aup 0 c++ visual-c++

注意:这个问题的编辑方式从一开始就与问题的意图更相关。

这是代码:

class SmallClass
{
public:
    std::function<void(SmallClass*)> function;
};

class BigClass
{
public:
    SmallClass smallClass;

    void SomeFunction(SmallClass* smallClassP)
    {
        return;
    }

    BigClass()
    {
        smallClass.function = SomeFunction; // error
    }
};
Run Code Online (Sandbox Code Playgroud)

这是行不通的。使用 Visual Studio 会显示“没有运算符与这些操作数匹配 | 操作数类型为:std::function<void (SmallClass*)> = void (SmallClass*)”。通过写入std::bind(&BigClass::SomeFunction, this, &smallClass),它会奇怪地损坏smallClass并将其设置为 NULL。有办法解决这个问题吗?

小智 5

因为SomeFunction其实有一个无形的论点叫做“这个”。

像这样写:

smallClass.function = std::bind(&BigClass::SomeFunction, this);
Run Code Online (Sandbox Code Playgroud)

或使用 lambda:

smallClass.function = [this]() { SomeFunction(); };
Run Code Online (Sandbox Code Playgroud)