параметр-ссылка в шаблонах
От: Vitaly_Sedelnik  
Дата: 26.09.03 09:29
Оценка:
Всем привет! Такая проблема:

есть классы BlockNode и Block. В классе BlockNode есть метод void link_block(Block& b).
есть список list<BlockNode*> nodes. Нужно вызвать for_each для списка с вызовом link_block.

пишу:
for_each(nodes.begin(), nodes.end(),
bind2nd(mem_fun1(&BlockNode::link_block), b)), где b — переменная типа Block&

при компиляции возникает ошибка "Cannot define a pointer or reference to a reference".
Такое впечатление, что методы с параметром-ссылкой нельзя так использовать. Вопрос: так
ли это?

Если изменить метод на link_block(Block* b), то все работает.
Re: параметр-ссылка в шаблонах
От: Lorenzo_LAMAS  
Дата: 26.09.03 09:43
Оценка:
А биндер2нд так устроен. Загляни в исходники.
Of course, the code must be complete enough to compile and link.
Re[2]: параметр-ссылка в шаблонах
От: Vitaly_Sedelnik  
Дата: 26.09.03 09:52
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>А биндер2нд так устроен. Загляни в исходники.


так есть ли способ вызвать в for_each метод с параметром-ссылкой?
Re[3]: параметр-ссылка в шаблонах
От: ArtDenis Россия  
Дата: 26.09.03 10:29
Оценка:
Здравствуйте, Vitaly_Sedelnik, Вы писали:

VS> L_L>А биндер2нд так устроен. Загляни в исходники.

VS> так есть ли способ вызвать в for_each метод с параметром-ссылкой?

Первый вариант:
class BlockNode
{
public:
  void link_block(Block  *b );
};

/// ......
std::for_each
(
  nodes.begin(),
  nodes.end(),
  std::bind2nd(std::mem_fun(&BlockNode::link_block),  &b )
);


Второй вариант — использовать boost::bind и boost::ref

---------------------------------------------------------
СНП, Artyomov Denis. E-mail: artyomov <at> inbox.ru
Posted via RSDN NNTP Server 1.7 "Bedlam"
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: параметр-ссылка в шаблонах
От: Vitaly_Sedelnik  
Дата: 26.09.03 10:54
Оценка:
Здравствуйте, ArtDenis, Вы писали:


AD>Второй вариант — использовать boost::bind и boost::ref


А что такое boost::bind и boost::ref? Я ничего подобного
не нашел.
Re[5]: параметр-ссылка в шаблонах
От: ArtDenis Россия  
Дата: 26.09.03 11:11
Оценка:
Здравствуйте, Vitaly_Sedelnik, Вы писали:
V_S>А что такое boost::bind и boost::ref? Я ничего подобного

http://www.boost.org/

В этом случае твой код будет выглядеть так:

std::for_each
(
  nodes.begin(),
  nodes.end(),
  boost::bind( &BlockNode::link_block, _1, boost::ref(b) )
);


Если не нравится boost, можешь сам написать аналог std::bind2nd для своего случая.

Денис.
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.