将成员函数分配给实例成员的属性

时间:2019-05-20 00:21:27

标签: c++ function c++11 callback instance

我仍在寻找解决C ++问题的方法。我有一个包含另一个类(不能从其继承)的实例成员的类,其中包括回调。我想将此回调注册到父类,但遇到困难。

经过一番摸索,我了解了方法!=函数,因为实例方法隐式地期望它自己的实例(我可以最好地描述它!),而class ChildClass { public: std::function<int(int)> callback; }; class MainClass { public: ChildClass childClass; MainClass() { this->childClass.callback = this->square; } private: int square(int i) { return i * i; } }; 是一个选择,但我不能当签名不是<a-asset-item id="whale">时,可以使用此功能。

我还阅读了有关实现为接口的方法,类似于委托(我来自Swift背景),这也很有吸引力。

这是我要达到的目标的准系统版本:

id="whaleModel"

我知道类型不匹配是导致错误的原因,但我不知道如何让它们一起玩。

1 个答案:

答案 0 :(得分:4)

您可以使用lambda(捕获this)。

MainClass()
{
    this->childClass.callback = [this](int i) { return this->square(i); };
}

LIVE

或者如果您想坚持使用std::bind

MainClass()
{
    using namespace std::placeholders;
    this->childClass.callback = std::bind(&MainClass::square, this, _1);
}

LIVE

然后查看Bind Vs Lambda?When should I use std::bind?