从列表中删除回调函数

Remove callback function from list?

本文关键字:回调 函数 删除 列表      更新时间:2023-10-16

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

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

现在,如果我尝试通过以下方式从该列表中删除对象

callbackBindings[index].remove(callback);

我得到

错误

100 错误 C2248:"std::function<_Fty>::运算符 ==":无法访问类"std::function<_Fty>中声明的私有成员 D:\Program\Development\Visual Studio Ultimate 2012\VC\include\list 1592 1 D-Tris

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

PS:回调绑定看起来像这样:

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

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

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