Re[4]: bind2nd
От: Bell Россия  
Дата: 28.03.02 15:59
Оценка:
Здравствуйте Павел Кузнецов, Вы писали:


ПК>Тут вы, батенька, поторопились :)

Эээ...
Есть маленько :shuffle:

Но все равно проблема стандартного STL не в отсутствии дополнительного "константного" шаблона, а в определении mem_fun1_ref_t:

template<class _R, class _Ty, class _A>
class mem_fun1_ref_t : public binary_function<_Ty * , _A, _R>



Тогда при использовании bind2nd, в

template<_Operation>
...
binder2nd::operator()(const typename _Operation::first_argument_type& __x) const


выражению _Operation::first_argument_type соответствует _Ty * , а for_each в качестве параметра передает объект типа _Ty
Вот это и есть причина ошибки.

Что касается приведенных Вами определений mem_fun1_ref и const_mem_fun1_ref — то здесь все нормально, но строка
for_each(v.begin(),v.end(),bind2nd(mem_fun1_ref( A::Func1 ),10) );

все равно не будет компилиться, если A::Func1 не объявлена с модификатором const.
Или есть биндер, у которого operator() объявлен так:
template<_Operation>
...
binder2nd::operator()(typename _Operation::first_argument_type& __x) const


???
Я пока ничего похожего не нашел...
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.