【发布时间】:2021-05-18 08:46:37
【问题描述】:
谁能解释一下为什么这段代码不能编译:
std::function<void(int)> intcb = [](int a)
{
std::cout << "callback: " << a << std::endl;
};
std::list<std::function<void(int)>> list;
list.push_back(intcb);
list.remove(intcb);
构建错误位于删除函数中:
no match for 'operator==' (operand types are 'std::function<void(int)>' and 'const value_type' {aka 'const std::function<void(int)>'})
感谢您的帮助
【问题讨论】:
-
该解决方案是否应该适用于带有捕获的 lambda?如果你不需要有状态的函数,你可以使用普通函数指针。
-
作为一种更简单但更昂贵的替代方案,您可以考虑将函数存储在
std::unordered_map<tag_t,std::function<void(int)>中,以便您可以根据某些标签删除它们。 -
std::functions 不能使用==相互比较。但是您可以为它制作自己的可比较的包装器。示例:stackoverflow.com/a/53462084/2752075 -
目前我认为
std::unordered_map的想法是最好的解决方案......我会尝试这样:-) 感谢大家的帮助 -
是否需要按一定的顺序执行回调?否则你可以使用
pop_back()或pop_front()