Информация об изменениях

Сообщение Re[8]: хитрая конструкция от 06.03.2015 15:14

Изменено 06.03.2015 15:15 Кодт

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

X>>да, использование лямбды тут совершенно необосновано.


H_C>а как можно без лямбды?


Да любым способом утилизировать произвольное количество аргументов.
void devnull(int... args) {}

#define CALL(expr) ( (expr), void(), 0 ) // выполняет выражение, возможно, типа void, и возвращает int 0

template<class F, class... Xs>
void each(F f, Xs&&... xs)
{
  devnull( CALL(f(xs))... );
  (void) std::initializer_list<int> { CALL(f(xs))... };
  int nulls[] = { CALL(f(xs))... };

}
Re[8]: хитрая конструкция
Здравствуйте, Hard_Club, Вы писали:

X>>да, использование лямбды тут совершенно необосновано.


H_C>а как можно без лямбды?


Да любым способом утилизировать произвольное количество аргументов.
void devnull(...) {}

#define CALL(expr) ( (expr), void(), 0 ) // выполняет выражение, возможно, типа void, и возвращает int 0

template<class F, class... Xs>
void each(F f, Xs&&... xs)
{
  devnull( CALL(f(xs))... );
  (void) std::initializer_list<int> { CALL(f(xs))... };
  int nulls[] = { CALL(f(xs))... };

}