注意:这个问题的编辑方式从一开始就与问题的意图更相关。
这是代码:
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。有办法解决这个问题吗?