具有零参数的模板说明符

时间:2013-10-26 22:40:28

标签: c++ templates c++11 zero

我的课程定义类似于以下内容:

template< typename A, typename... B >
struct S {
    //...//
};

但是我想像这样创建一个重载(有效):

template<>
struct S<> {
    //...//
};

然而,上面显然是非法的,我不能使用varidic模板,并传递零参数,因为这可能与第一个定义(和不好的做法)不明确。有没有办法在C ++中创建零参数的模板说明符?

1 个答案:

答案 0 :(得分:8)

问题是您正在尝试创建与主模板不匹配的部分特化(主模板至少需要一个参数)。如果要使用可变参数模板,则可以执行以下操作:

template <typename... A>
struct S {
  // One-or-more case
};

template <>
struct S<> {
  // Zero case
};

根据评论,海报想找到非空案件的第一个论点;对此的修改是:

template <typename... A>
struct S;

template <>
struct S<> {
  // Zero case
};

template <typename A, typename... B>
struct S<A, B...> {
  // One-or-more case
};