ptr_fun, биндеры и функции с аргументами-ссылками
От: rus blood Россия  
Дата: 11.10.05 08:51
Оценка:
Функция 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

Кто что скажет?
Имею скафандр — готов путешествовать!
Re: ptr_fun, биндеры и функции с аргументами-ссылками
От: korzhik Россия  
Дата: 11.10.05 08:56
Оценка: 6 (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 если есть возможность.
Re: ptr_fun, биндеры и функции с аргументами-ссылками
От: korzhik Россия  
Дата: 11.10.05 09:02
Оценка: 6 (1)
Здравствуйте, rus blood, Вы писали:

RB>Кто что скажет?


вот ещё здесь
Автор: korzhik
Дата: 01.04.05
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.