如何从val中删除std :: deque中的函数指针?

时间:2016-10-17 10:37:10

标签: c++ c++11 function-pointers deque member-function-pointers

我正在使用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

1 个答案:

答案 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的项目都已删除。