如何在C++事件中实现remove处理程序
How to implement remove handler in C++ event
我有一个Event类。在AddHandler(thisPtr, callback)
中,我在thisPtr
和callback
上使用tr1::bind
,最终我有了一个列表:
typedef std::tr1::function<void( int& )> CallbackFunction;
std::list< CallbackFunction > m_handlers;
但是,如果tr1::function
不可比较,我如何实现remove处理程序方法?
我应该保留一个从对象指针和回调到tr1::function
的映射,并删除一个具有相同对象指针和指向RemoveHandler
中参数的回调指针的映射吗?这是一种安全的方法吗?
由于您使用的是std::list,它从不使迭代器无效,因此只要元素留在容器中,就可以使用迭代器来跟踪您插入的函数。示例:
typedef std::list<CallbackFunction> func_list;
typedef typename func_list::iterator func_it;
func_it Insert(func_list & l, Callback c)
{
l.insert(l.begin(), c);
return l.begin();
}
现在,您可以调用该函数来插入回调,它将向它返回一个迭代器,您可以使用它来删除它,如下所示:
func_it it = Insert(l, c);
l.erase(it);
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用函数"remove"删除重复元素
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 链表的泛型函数remove()与成员函数remove)
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 如何在C++事件中实现remove处理程序