我有一个Event类。在AddHandler(thisPtr, callback)
我在tr1::bind
和thisPtr
上使用callback
,最后我有一个列表:
typedef std::tr1::function<void( int& )> CallbackFunction;
std::list< CallbackFunction > m_handlers;
但如果tr1::function
不具有可比性,我怎样才能实现删除处理程序方法?
我应该保持从对象指针和回调到tr1::function
的映射,并删除具有相等对象指针和回调指针的映射到RemoveHandler
中的参数吗?这是一种安全的方法吗?
答案 0 :(得分:1)
由于您正在使用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);