我正在使用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
?
答案 0 :(得分:1)
如果你处理常规功能,你可以根据std::function::target执行类似的操作:
void callback_1(void) {}
void callback_2(void) {}
actionCallbacks = {
std::function<void(void)>(callback_1),
std::function<void(void)>(callback_2),
std::function<void(void)>(callback_1)
};
actionCallbacks.erase(
std::remove_if(actionCallbacks.begin(), actionCallbacks.end(), [](cb_Action action) {
return (*action.target<void(*)(void)>() == callback_1);
}),
actionCallbacks.end()
);
此处所有内置callback_1
的项目都已删除。