从列表中删除回调函数?

时间:2014-02-18 19:25:42

标签: c++ list function callback

好的,我有一个回调列表,Callback定义如下:

typedef std::function<void(Event*)> Callback;

现在如果我尝试通过

从该列表中删除对象

callbackBindings[index].remove(callback);

我得到了

  

错误100错误C2248:'std :: function&lt; _Fty&gt; :: operator ==':无法访问类'std :: function&lt; _Fty&gt;'中声明的私有成员D:\ Program \ Development \ Visual Studio Ultimate 2012 \ VC \ include \ list 1592 1 D-Tris

如何从该列表中删除元素?

PS:CallbackBindings如下所示:

static std::unordered_map<std::type_index, std::list<Callback>> callbackBindings;

1 个答案:

答案 0 :(得分:2)

您无法比较std::function个对象的相等性。您必须通过其他方式删除它们,例如通过索引或迭代器(您必须在保存回调时存储),或通过关联容器中的映射键。

(例如,假设您插入到本地指定为[](Event*){}的回调。没有机制或逻辑来判断是否应该将任何两个这样的表达式视为“相等”。)