Разверните пакет параметров в порядке

У меня есть функция, которая принимает кортеж, и я хочу перебрать членов кортежа по порядку. Моя текущая версия зависит от компилятора, потому что она использует параметры функции для распаковки членов кортежа (в std::make_tuple()).

Я построил упрощенный пример того, что я делаю:

template<typename T>
void* printMember(T const& d)
{
    std::cout << d << " ";
    return nullptr;
}
template<typename Members, std::size_t... Seq>
void printTuppleMembers(Members const& members, std::index_sequence<Seq...> const&)
{
    std::make_tuple(printMember(std::get<Seq>(member))...);
}
template<typename... Members>
void printTupple(std::tuple<Members...> const& members)
{
    printTuppleMembers(members, std::make_index_sequence<sizeof...(Members)>());
}

Я не могу придумать способ заставить призвание printMember() для каждого члена набора, так что это происходит для членов 0..n в правильном порядке.

Я пытался использовать списки инициализатора.

std::make_tuple({printMember(std::get<Seq>(member))...});
         //     ^                                     ^

Но это не скомпилировано.

В настоящее время он работает в моей системе, но я хотел бы общее решение, которое работает на всех системах.

1 ответ

Расширение пакета внутри списка инициализированных скобок гарантируется слева направо:

auto discard = {0, (printMember(std::get<Seq>(members)), 0)...};
(void)discard;
Другие вопросы по тегам