bind1st+mem_fun
От: blashyrkh  
Дата: 29.07.07 16:06
Оценка:
Есть вот такой код:

[ccode]
struct S {};

class C
{
public:
void f(const S&) {}
};

S s;
std::vector<C*> v;

...

// Требуется вызвать метод f для всех элементов v.
// Вот этот способ не работает:
std::for_each(v.begin(), v.end(), std::bind1st(std::mem_fun(&C::f), s);

[/code]

В результате в недрах STL образуется ссылка на ссылку, и программа не компилируется. Возможно ли переписать вызов for_each без(!) использования boost так, чтобы указанный пример заработал правильно?
Re: bind1st+mem_fun
От: np9mi7 Россия  
Дата: 29.07.07 16:50
Оценка:
Здравствуйте, blashyrkh, Вы писали:

B>В результате в недрах STL образуется ссылка на ссылку, и программа не компилируется. Возможно ли переписать вызов for_each без(!) использования boost так, чтобы указанный пример заработал правильно?


Тут тебе несколько вариантов:

1) Напиши в этом месте цикл;
2) Не используй STL — евский bind, а используй функтор с котором сохрани эту ссылку;
3) Используй STLPort, их bind — ы могут разрешать ссылки на ссылки;

ps: for_each тут не причем — проблема в bind — ах;
[RSDN@Home 1.1.4 stable SR1 rev. 568 on Windows 2003 5.2.3790.0]
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.