class foo {
public:
std::function<void(int)> func;
};
class obj {
public:
obj() { f.func = std::bind(&obj::update, this); }
void update(int ms) { _ms = ms; }
private:
int _ms;
foo f;
};
我想绑定obj
的函数,因为当foo
中发生某些事情时,后者会通知其他类而不使用观察者模式。
有人可以帮我做到这一点吗?
答案 0 :(得分:0)
编辑:查看您的代码,似乎在将f.func分配给std :: bind时缺少了std :: placeholders :: _ 1。执行以下操作可以解决您的问题。
obj() { f.func = std::bind(&obj::update, this, std::placeholders::_1); }
您可以按以下方式分配函数,但是说实话,我不确定如果我们将其作为std :: ref传递,这是否是一个好主意。对于本示例,我认为这不会引起问题,因为std :: bind使用move,但是如果f
不是obj
的成员,并且如果它通过作为引用,那么如果obj
在调用f::func
之前被销毁。
class foo
{
public:
void AssignFunc(std::function<void(int)> callback)
{
func = callback;
func(10);
}
private:
std::function<void(int)> func;
};
class obj {
public:
obj()
{
f.AssignFunc(std::bind(&obj::update, this, std::placeholders::_1));
}
void update(int ms)
{
_ms = ms;
}
private:
int _ms;
foo f;
};
答案 1 :(得分:0)
您需要添加占位符,但不推荐使用std :: bind,并且在C ++ 17中将其删除,因此请不要使用它。现代C ++为我们提供了以下解决方案:
center = F
我建议您了解lambda函数以及如何使用它们。
关于std :: bind弃用 this suggestion 第三条必须死的东西,才能看到活页夹和功能对象。