2

可能重复:
我应该选择哪个 C++ 信号/插槽库?

我一直在使用升压信号/信号 2 来允许事件连接/函数调度。

它工作正常,但我有两个问题。

- 这是较小的一个,但处理断开连接可能会很痛苦。我使用可跟踪类来帮助解决这个问题,但它并不能解决所有问题。如果我想在任意时间断开信号,必须跟踪连接也有点麻烦

- 这是更大的一个。没有办法复制信号,这意味着我每次向类添加信号时都需要实现一个复制构造函数,如果我确实复制了该类,它将不再有任何事件挂钩。显而易见的解决方案是让持有的 Signal 成为一个指针,然后它是可复制和可共享的,但这感觉很脏而且形式不好。

鉴于上述情况,我开始寻找替代方案,但上述问题对于信号库来说似乎很常见。我想知道是否有人有解决上述问题的建议;也许是一种直接处理它们的方法。

在开始使用升压信号之前,我也在考虑回到我原来的解决方案。像这样的东西:

boost::unordered_map<std::string, boost::function>

boost::function 将代替 slot/callbacks,然后我向持有这个 map 的类添加一个 Dispatch 函数,该函数将循环遍历并调用每个 boost::function。使用这种方法,我可以随时轻松删除回调,并且可以复制地图。有人告诉我这不是一个好方法,但现在看,我真的看不出这里有问题。

此外,现在有了可变参数模板,围绕该地图创建一个小类来处理对地图的 Dispatch/Add/Remove 回调调用应该是一件容易的事。

这是一个不好的方法吗?

4

0 回答 0