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

'boost::operator ==' : 4 overloads have similar conversions

本文关键字:转换 boost operator 重载      更新时间:2023-10-16

下面的代码给出了一个编译时错误。有人对如何解决这个问题或什么可能导致它有任何想法吗?

'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 

当您调用std::list<T>::remove时,它通过将其与列表中的元素进行比较来查找要删除的值。在boost::function对象的情况下,这失败了,因为boost::function对象不能比较。参见为什么不能比较boost::function对象与operator==或operator!=在Boost Function FAQ.

你需要以另一种方式从列表中删除对象(例如使用erase和迭代器)。

在本例中,看起来您正在实现类似Boost的东西。图书馆的信号。你可能想用它来代替——它提供了一种注册多个回调并删除它们的方法。