我一直在尝试用C++实现类似C#的事件系统,其中tr1函数模板用于存储处理事件的函数.
我创建了一个向量,以便可以将多个侦听器附加到此事件,即:
vector< function> listenerList;
我希望能够从列表中删除处理程序以阻止侦听器接收事件.
那么,如何在此列表中找到与给定侦听器对应的条目?我可以测试列表中的"函数"对象是否指向特定函数吗?
谢谢!
编辑:看过boost :: signal方法,看起来它可能是使用令牌系统实现的,正如你们所建议的那样.这是关于此的一些信息.观察者在附加到事件时保留"连接"对象,并且此连接对象用于在需要时断开连接.所以看起来你是使用Boost还是使用tr1自己动手,基本原理是一样的.即它会有点笨拙:)
我不知道你是否被锁定在std C++和tr1中,但如果你不是,那么如果你只是使用boost :: signal和boost :: bind来解决你的问题,你的问题似乎可以完全避免原始问题 - 创建一个事件系统 - 而不是试图自己推动.