是否有可能,使用 C++11/14/1z,有一个带有两个参数包的模板化结构,并在其中实例化一些其他的模板化结构,两个参数包是交错的?即如果第一个包是 T1_1、T1_2、T1_3,第二个包是 T2_1、T2_2 和 T2_3,交错包将是 T1_1、T2_1、T1_2、T2_2、T1_3、T2_3?我的猜测是“不”,因为省略号不能应用于两个参数包元素指示符;但也许某种元组构造或递归实例化技巧可以奏效?
编辑:让我明确地假设包具有相等的长度(sizeof...
值)。如果它不会使事情变得更加复杂,那么针对不同长度的包装的解决方案会很好。
最佳答案
这方面的所有单独部分实际上已经添加到标准中。我现在无法自行测试,但这个想法应该可行。
template <class Tuple1, class Tuple2, std::size_t ... indices>
auto interleave(Tuple1 t1, Tuple2 t2, std::integer_sequence<std::size_t, indices...>)
{
return std::tuple_cat(std::make_tuple(std::get<indices>(t1),
std::get<indices>(t2))...);
}
template <class Tuple1, class Tuple2>
auto interleave(Tuple1 t1, Tuple2 t2)
{
return interleave(t1, t2, std::make_index_sequence<std::tuple_size<Tuple1>::value>());
}
关于c++ - 是否可以交错参数包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37976525/