注意:这个问题的编辑方式从一开始就与问题的意图更相关。
这是代码:
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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           317 次  |  
        
|   最近记录:  |