Функция ptr_fun создает функторы pointer_to_unary_function и pointer_to_binary_function, в которых типы аргументов совпадают с типами аргументов адаптируемой фукции. Т.е. сигнатуры вызовов operator() выглядят так
Result operator()(const Arg _Left) const;
Result operator()(const Arg1 _Left, const Arg2 _Right) const;
, т.е. без референсов.
В то же время, классы binder1st и binder2nd определяют operator() так
result_type operator()(const argument_type& _Right) const
result_type operator()(argument_type& _Right) const
, т.е. вешают референсы.
Из-за этого невозможно явно использовать функции с аргументами-ссылками.
void SomeFunc(int&, int) {}
bind2nd(ptr_fun(SomeFunc), 0); /*сплошной мат-перемат*/
VC 7.1
Кто что скажет?
Здравствуйте, rus blood, Вы писали:
RB>Функция ptr_fun создает функторы pointer_to_unary_function и pointer_to_binary_function, в которых типы аргументов совпадают с типами аргументов адаптируемой фукции. Т.е. сигнатуры вызовов operator() выглядят так
RB>RB>Result operator()(const Arg _Left) const;
RB>Result operator()(const Arg1 _Left, const Arg2 _Right) const;
RB>
, т.е. без референсов.
RB>В то же время, классы binder1st и binder2nd определяют operator() так
RB>RB>result_type operator()(const argument_type& _Right) const
RB>result_type operator()(argument_type& _Right) const
RB>
, т.е. вешают референсы.
RB>Из-за этого невозможно явно использовать функции с аргументами-ссылками.
RB>RB>void SomeFunc(int&, int) {}
RB>bind2nd(ptr_fun(SomeFunc), 0); /*сплошной мат-перемат*/
RB>
VC 7.1
RB>Кто что скажет?
ИМХО архитектурная ошибка STL.
Используй
boost/functional.hpp если есть возможность.
Здравствуйте, rus blood, Вы писали:
RB>Кто что скажет?
вот ещё
здесьАвтор: korzhik
Дата: 01.04.05