【发布时间】:2017-02-26 07:22:57
【问题描述】:
我正在使用std::deque 来保留回调函数。
除了删除特定的回调之外,一切都完美无缺。
typedef std::function<void(void)> cb_Action;
std::deque<cb_Action> actionCallbacks;
我可以一一添加或清除所有项目而没有任何问题。
但我无法从 deque 变量中删除特定回调。
actionCallbacks.erase ( std::remove(actionCallbacks.begin(), actionCallbacks.end(), callbackToRemove), actionCallbacks.end());
它给出了编译时错误:
binary '==': no operator found which takes a left-hand operand of type:'std::function<void(void)>' (or there is no acceptable conversion)
那么,如何删除特定的cb_Action?
【问题讨论】:
-
这是因为 std::function 不能相互比较。 == 和 != 运算符的唯一重载是那些与 nullptr 进行比较的重载。
-
我认为您应该存储包含回调及其处理程序的结构,例如size_t id,如果你想删除特定的回调,你应该提供它的处理程序
-
@stryku:我认为您的意思是“包含回调及其句柄”。 “处理程序”(名词)是“处理”(动词)某物的事物。回调是用 C++ 编写处理程序的典型方式。 “句柄”是(除其他外)您可以引用对象的一种方式。
-
@MartinBonner 你找到我了。我花了太多时间在 Windows 上编码 ;) 当然,说 handler 我的意思是回调 id 或类似的东西。
标签: c++ c++11 function-pointers deque member-function-pointers