了解可变参数模板

Understanding Variadic Templates

尝试使用可变参数模板理解这段代码:

template <typename... T>
struct FooGroup;

template <typename... FooTypes, typename... BarTypes>
struct TEST<FooGroup<FooTypes...>, BarGroup<BarTypes...>>

我知道可变参数模板允许您传入未知类型的未知数量。但是,这让我感到困惑。任何人都可以解释一下吗?

这个代码

template <typename... T>
struct FooGroup;

FooGroup 声明为 struct 接收类型模板参数的可变列表。

template <typename... FooTypes, typename... BarTypes>
struct TEST<FooGroup<FooTypes...>, BarGroup<BarTypes...>>

是模板专业化的一部分。

我假设TEST声明如下

template <typename, typename>
struct TEST;

所以接收到两个模板类型参数。

template <typename... FooTypes, typename... BarTypes>
struct TEST<FooGroup<FooTypes...>, BarGroup<BarTypes...>>

如果第一个模板参数的形式为 FooGroup<FooTypes...>(其中 FooTypes... 是模板参数的可变列表)和第二个模板,则声明 TEST 的部分特化参数的形式为 BarGroup<BarTypes...>(我认为 BarGroup 几乎定义为 FooGroup,而 BarTypes... 是模板参数的另一个可变列表)