我一直在使用升压信号/信号2一段时间来允许事件连接/功能调度。
它工作正常,但我有两个问题。
- 这是较小的一个,但处理断开连接可能会很痛苦。我使用可跟踪类来帮助解决这个问题,但它并没有解决所有问题。如果我想在任意时间断开信号,必须跟踪连接,这也是一件令人讨厌的事情
- 这是更大的一个。没有办法复制信号,这意味着我每次向类添加信号时都需要实现一个复制构造函数,如果我复制了类,它将不再有任何事件被连接起来。显而易见的解决方案是使保持的信号成为一个指针,然后它是可复制的和可共享的,但这样会感觉很脏并且形式不好。
鉴于上述情况,我开始寻找替代方案,但上述问题似乎对信号库来说很常见。我想知道是否有人有解决上述问题的建议;也许是一种直接处理它们的方法。
在开始使用增强信号之前,我还在考虑回到原来的解决方案。像这样:
boost::unordered_map<std::string, boost::function>
boost :: function将取代slot / callbacks,然后我将一个Dispatch函数添加到持有这个map的类中,该类将循环调用每个boost :: function。通过这种方法,我可以随时轻松删除回调,我可以复制地图。我被告知这不是一个好方法,但现在看着它,我真的不能在这里看到问题。
此外,现在有了可变参数模板,围绕此映射创建一个小类来处理对映射的Dispatch / Add / Remove回调调用应该是一件容易的事。
这是一种不好的方法吗?