了解可变参数模板
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...
是模板参数的另一个可变列表)
尝试使用可变参数模板理解这段代码:
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...
是模板参数的另一个可变列表)