我有一个带元组的函数,我想按顺序遍历元组成员。我当前的版本依赖于编译器,因为它使用函数参数来解包元组成员(在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))...});
// ^ ^
但这没有编译。
它目前适用于我的系统,但我想要一个适用于所有系统的通用解决方案。
答案 0 :(得分:2)
支持初始化列表中的包扩展保证从左到右评估:
auto discard = {0, (printMember(std::get<Seq>(members)), 0)...};
(void)discard;