下面的代码给出了编译时错误。任何人都有任何关于如何解决这个或可能导致它的原因的想法?
'boost :: operator ==':4次重载具有类似的转换
typedef boost::function<void (boost::weak_ptr<std::string>)> Callback;
std::list<Callback> callbacks;
Callback func;
callbacks.remove(func); // This causes the error
答案 0 :(得分:4)
当您致电std::list<T>::remove
时,它会通过将其与列表中的元素进行比较来查找要删除的值。对于boost::function
个对象,由于无法比较boost::function
个对象,因此失败。请参阅Boost功能常见问题解答中的Why can't I compare boost::function objects with operator== or operator!=。
您需要以其他方式从列表中删除对象(例如,使用erase
和迭代器)。
在这种情况下,看起来您正在实现类似于Boost.Signals库的内容。您可能希望使用它 - 它提供了一种注册多个回调并删除它们的方法。