比较std :: tr1 :: function <>对象

Ale*_*exG 5 c++ function tr1

我一直在尝试用C++实现类似C#的事件系统,其中tr1函数模板用于存储处理事件的函数.

我创建了一个向量,以便可以将多个侦听器附加到此事件,即:

vector< function<void (int)> >  listenerList;
Run Code Online (Sandbox Code Playgroud)

我希望能够从列表中删除处理程序以阻止侦听器接收事件.

那么,如何在此列表中找到与给定侦听器对应的条目?我可以测试列表中的"函数"对象是否指向特定函数吗?

谢谢!

编辑:看过boost :: signal方法,看起来它可能是使用令牌系统实现的,正如你们所建议的那样.这是关于此的一些信息.观察者在附加到事件时保留"连接"对象,并且此连接对象用于在需要时断开连接.所以看起来你是使用Boost还是使用tr1自己动手,基本原理是一样的.即它会有点笨拙:)

Nic*_*tin 8

我不知道你是否被锁定在std C++和tr1中,但如果你不是,那么如果你只是使用boost :: signal和boost :: bind来解决你的问题,你的问题似乎可以完全避免原始问题 - 创建一个事件系统 - 而不是试图自己推动.


Mat*_*ank 2

boost 函数文档中的常见问题解答 #1似乎解决了您的问题 - 简单的答案是“否”。