是否可以交错参数包?

ein*_*ica 5 c++ templates variadic-templates c++11

使用 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...值)。对于不同长度的包的解决方案会很好,只要它不会让事情变得更加复杂。

Edw*_*nge 0

当然有可能。您可以通过包装器获得两个不同的包:

template < typename L0, typename L1 >
struct interleave;

template < typename ... Pack >
struct pack {};

template < typename ... P0, typename ... P1 >
struct interleave<pack<P0...>, pack<P1...>>
{
   using type = ???;
};
Run Code Online (Sandbox Code Playgroud)