'boost :: operator ==':4次重载有类似的转换

时间:2011-07-29 20:41:42

标签: c++ boost compiler-errors

下面的代码给出了编译时错误。任何人都有任何关于如何解决这个或可能导致它的原因的想法?

  

'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 

1 个答案:

答案 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库的内容。您可能希望使用它 - 它提供了一种注册多个回调并删除它们的方法。