好的,我有一个回调列表,回调定义如下:
typedef std::function<void(Event*)> Callback;
现在,如果我尝试通过
从该列表中删除一个对象callbackBindings[index].remove(callback);
我明白了
Error 100 error C2248: 'std::function<_Fty>::operator ==' : cannot access private member declared in class 'std::function<_Fty>' D:\Programme\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;
最佳答案
您不能比较 std::function
对象的相等性。您将不得不通过其他方式删除它们,例如通过索引或迭代器(您必须在保存回调时存储),或通过关联容器中的映射键。
(例如,假设您插入了在本地指定为 [](Event*){}
的回调。没有任何机制或逻辑可以判断是否应考虑任何两个这样的表达式“等于”。)
关于c++ - 从列表中删除回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21863445/