'boost :: operator ==': 4 перегрузки имеют похожие преобразования - PullRequest
3 голосов
/ 30 июля 2011

Код ниже дает мне ошибку во время компиляции. У кого-нибудь есть идеи, как это исправить или что может быть причиной этого?

'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 Ответ

4 голосов
/ 30 июля 2011

Когда вы вызываете std::list<T>::remove, он ищет значение для удаления, сравнивая его с элементами в списке. В случае boost::function объектов это не удается, потому что boost::function объекты нельзя сравнивать. См. Почему я не могу сравнить объекты boost :: function с operator == или operator! = = 1005 * в FAQ по функции Boost.

Вам потребуется удалить объекты из списка другим способом (например, с помощью erase и итератором).

В этом случае похоже, что вы реализуете нечто похожее на библиотеку Boost.Signals . Возможно, вы захотите использовать это вместо этого - он предоставляет способ зарегистрировать несколько обратных вызовов и удалить их.

...