具有零参数的模板说明符

Template Specifier With Zero Parameters

本文关键字:说明符 参数      更新时间:2023-10-16

>我有一个类似于以下内容的类定义:

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

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

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

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

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

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
};