Раскрытие кортежей

_NN_
_NN_

Вместо неуклюжего std::apply:

void f(int a, char c) {}

auto t = make_tuple(1, 'a');
std::apply(f, t);

Было бы полезно иметь синтаксис для распаковки, например:

void f(int a, char c) {}

auto t = make_tuple(1, 'a');
f(...t);


Определение: (синтаксис не окончательный)

Код вида "...a" заменяется компилятором в:

std::get<0>(a), std::get<1>(a), ... std::get<std::tuple_size<decltype(a)>::value>(a)

Таким образом отпадает необходимость в std::apply, а также во вспомогательных функциях при передачи переменных параметров.

В данном примере вызывается функция g для каждого аргумента переданного в f, а сама g вызывается с различным набором параметров.

template<typename T>
void g(T const&... t);

template<typename Tuple>
void f(Tuple const&... t)
{
  (g(...t), ...);
}

 

 

1
рейтинг
2 комментария
languagelawyer

http://wg21.link/p0535

languagelawyer
_NN_

languagelawyer, Эх, хотелось бы в следующей версии языка увидеть это :)

_NN_
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения