考虑以下人工示例:

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或更多的特例-后者是更一般的情况(并非相反)。

07-24 09:45
查看更多