c++ - 如何将 class1 的 std::function 绑定到 class2 的 func ?
问题描述
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
后者发生某些事情时,不使用观察者模式就通知其他类。有人可以帮我做到这一点吗?
解决方案
编辑:查看您的代码,当您将 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;
};
推荐阅读
- cmd - 如何在 HTA 中一一运行 CMD 命令
- ios - 如何将文件发送到“文件”应用中的“最近删除”文件夹?
- r - 在 R 中取消列出字符串并粘贴/连接
- python - 决策树算法实现
- python - 学习python,来自有效讲师的正确示例文件。第一次处理它,追加和弹出命令在我的电脑上不起作用
- scala - 如何更正 Scala 构造函数的错误参数?
- python - Matplotlib.savefig 忽略轴并在图像周围绘制黑色边框
- angularjs - 仅从另一页上的选定项目接收数据
- python-3.x - 嵌套 if 语句与多个扁平 if not 语句之间的性能
- javascript - 在vuejs2的js文件中导入js模块