按顺序展开参数包

Expand parameter pack in order

我有一个接受元组的函数,我想按顺序迭代元组成员。我当前的版本依赖于编译器,因为它使用函数参数来解压缩元组成员(在 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))...});
         //     ^                                     ^

但这并没有编译。

它目前适用于我的系统,但我想要一个适用于所有系统的通用解决方案。

花括号初始化器列表中的包扩展保证从左到右求值:

auto discard = {0, (printMember(std::get<Seq>(members)), 0)...};
(void)discard;