Вызов функций через for_each
От: Wody  
Дата: 20.01.10 12:33
Оценка:
Не могу сообразить, как сделать это через for_each:

int x = something1;
int y = something2;

typedef boost::function2<void, int, int> F;
typedef std::list <F> Functions;
Function functs;
//добавили несколько функций-членов классов в functs (boost::bind):

for(Functions::iterator i = functs.begin(); i != functs.end(); ++i)
  (*i)(x, y);

Как сделать без цикла?
Re: Вызов функций через for_each
От: placement_new  
Дата: 20.01.10 12:35
Оценка:
Здравствуйте, Wody, Вы писали:

W>Не могу сообразить, как сделать это через for_each:

Забиндить оператор () у типа F.
Re: Вызов функций через for_each
От: Alexander G Украина  
Дата: 20.01.10 13:13
Оценка: 3 (1)
Здравствуйте, Wody, Вы писали:

W>Не могу сообразить, как сделать это через for_each:


W>
W>int x = something1;
W>int y = something2;

W>typedef boost::function2<void, int, int> F;
W>typedef std::list <F> Functions;
W>Function functs;
W>//добавили несколько функций-членов классов в functs (boost::bind):

W>for(Functions::iterator i = functs.begin(); i != functs.end(); ++i)
W>  (*i)(x, y);

W>

W>Как сделать без цикла?

std::for_each(functs.begin(), functs.end(), boost::bind(boost::apply<void>(), _1, x, y));
Русский военный корабль идёт ко дну!
Re[2]: Вызов функций через for_each
От: Wody  
Дата: 20.01.10 13:24
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Wody, Вы писали:


W>>Не могу сообразить, как сделать это через for_each:


W>>
W>>int x = something1;
W>>int y = something2;

W>>typedef boost::function2<void, int, int> F;
W>>typedef std::list <F> Functions;
W>>Function functs;
W>>//добавили несколько функций-членов классов в functs (boost::bind):

W>>for(Functions::iterator i = functs.begin(); i != functs.end(); ++i)
W>>  (*i)(x, y);

W>>

W>>Как сделать без цикла?

AG>std::for_each(functs.begin(), functs.end(), boost::bind(boost::apply<void>(), _1, x, y));

То, что нужно! Спасибо.
Re[2]: Вызов функций через for_each
От: igna Россия  
Дата: 20.01.10 14:47
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>std::for_each(functs.begin(), functs.end(), boost::bind(boost::apply<void>(), _1, x, y));


Или используя Boost.Lambda:

std::for_each(functs.begin(), functs.end(), bind(boost::lambda::_1, x, y));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.