考虑以下人工示例:
template <typename T, typename... Args>
struct A {
typedef T Type;
};
结合使用带有1个或多个参数的
A
可以正常工作,而结合使用具有0个参数的A
却无法正常工作:是否可以使
A::Type
处理零模板参数的情况(如果没有参数,则将int
定义为ojit_code;如果有,则定义为第一个模板参数)? 最佳答案
首先将主要模板定义为最通用的情况-其中还包含零参数:
template <typename... Args> //general : 0 or more
struct A { using Type = int; }
然后将其专门用于 1个或更多参数,如下所示:
template <typename T, typename... Args> //special : 1 or more
struct A<T,Args...> { using Type = T; }
一旦拥有了这个特化,主模板将用于零参数仅!
请注意,在数学上 1或更多是 0或更多的特例-后者是更一般的情况(并非相反)。