将成员函数分配给实例成员的 属性
Assigning member functions to a property of an instance member
我仍在寻找解决 C++ 的方法并且遇到了问题。我有一个 class 包含另一个 class 的实例成员(不能继承),其中包括一个回调。我想将此回调注册给父 class 但遇到困难。
经过一番深入研究,我理解了 method != function,因为实例方法隐含地需要一个自身的实例(我能描述的最好的方式!)并且 std::bind
是一个选项,但我可以' 当签名不是 <void(void)>
.
时让它工作
我还阅读了有关作为接口实现的信息,类似于委托(我来自 Swift 背景),这也很吸引人。
这是我想要实现的目标的准系统版本:
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;
}
};
我知道错误类型不匹配是导致错误的原因,但我不知道如何让它们一起玩。
您可以使用 lambda(捕获 this
)。
MainClass()
{
this->childClass.callback = [this](int i) { return this->square(i); };
}
或者如果你想坚持 std::bind
:
MainClass()
{
using namespace std::placeholders;
this->childClass.callback = std::bind(&MainClass::square, this, _1);
}
并查看 Bind Vs Lambda? and When should I use std::bind?
我仍在寻找解决 C++ 的方法并且遇到了问题。我有一个 class 包含另一个 class 的实例成员(不能继承),其中包括一个回调。我想将此回调注册给父 class 但遇到困难。
经过一番深入研究,我理解了 method != function,因为实例方法隐含地需要一个自身的实例(我能描述的最好的方式!)并且 std::bind
是一个选项,但我可以' 当签名不是 <void(void)>
.
我还阅读了有关作为接口实现的信息,类似于委托(我来自 Swift 背景),这也很吸引人。
这是我想要实现的目标的准系统版本:
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;
}
};
我知道错误类型不匹配是导致错误的原因,但我不知道如何让它们一起玩。
您可以使用 lambda(捕获 this
)。
MainClass()
{
this->childClass.callback = [this](int i) { return this->square(i); };
}
或者如果你想坚持 std::bind
:
MainClass()
{
using namespace std::placeholders;
this->childClass.callback = std::bind(&MainClass::square, this, _1);
}
并查看 Bind Vs Lambda? and When should I use std::bind?