Сравнение объектов, возвращаемых Boost.Bind? - PullRequest
1 голос
/ 30 июля 2011

Возможно ли это? Инструкция bool b = (boost::bind(func, 1) == boost::bind(func, 1)) не компилируется, потому что она "не может преобразовать 'boost :: _ bi :: bind_t' в 'bool'". (Подпись func является void func(int).)

Ответы [ 2 ]

3 голосов
/ 31 июля 2011

Boost.Bind перегружает реляционные операторы для возврата вложенных выражений связывания.Таким образом, в вашем коде boost::bind(func, 1) == boost::bind(func, 1) возвращает нулевой (поскольку в выражениях связывания нет заполнителей) функтор, который при вызове возвращает func(1) == func(1).Это удобная функция для предикатов, среди прочего:

typeded std::pair<T, U> pair_type;
// find pair where the first element is equal to 3
std::find_if(begin, end, boost::bind(&pair_type::first, _1) == 3);

Кроме того, возвращаемый объект не может быть преобразован в bool, и именно поэтому он не будет компилироваться (не учитывая проблему, с которой он не связан).делать то, что вы хотите).

То, что вы хотите сделать, не является частью интерфейса Boost.Bind.Tt не будет очень полезной функцией и в (очень) общем случае будет неразрешимой .

1 голос
/ 31 июля 2011

Не знаю, является ли это "официально поддерживаемой функциональностью", но bind_t, по-видимому, предоставляет метод function_equal: http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp

...