C++ 声明没有参数的模板结构

C++ 声明没有参数的模板结构,c++,templates,C++,Templates,我有以下清单: template<typename T, typename... TT> struct List { typedef T head; typedef List<TT...> next; enum { size = sizeof...(TT)+1 }; }; template<typename T> struct List<T> { typedef T head; typedef NIL ne

我有以下清单:

template<typename T, typename... TT>
struct List {
    typedef T head;
    typedef List<TT...> next;
    enum { size = sizeof...(TT)+1 };
};

template<typename T>
struct List<T> {
    typedef T head;
    typedef NIL next;
    enum { size = 1 };
};

如何解决此问题?

您的主要模板应该是:

template<typename ... Ts> struct List;
模板结构列表;

然后,您可以对0、1、N个参数进行部分专门化。

您的主模板应该是:

template<typename ... Ts> struct List;
模板结构列表;

然后您可以对0,1,N个参数进行部分专门化。

只需在主模板中添加一个默认值,在下面的示例中,我将空值改为NIL,但它适用于任何类型

template<typename T = void, typename... TT>
struct List
{
  typedef T head;
  typedef List<TT...> next;
  enum { size = sizeof...(TT)+1 };
};

template<typename T>
struct List<T>
{
  typedef T head;
  typedef void next;
  enum { size = 1 };
};

template<>
struct List<>
{
  typedef void head;
  enum { size = 0 };
};
模板
结构列表
{
T型头;
下一步输入定义列表;
枚举{size=sizeof…(TT)+1};
};
模板
结构列表
{
T型头;
然后输入def void;
枚举{size=1};
};
模板
结构列表
{
typedef空头;
枚举{size=0};
};

只需在主模板中添加一个默认值,在下面的示例中,我将void改为NIL,但它适用于任何类型

template<typename T = void, typename... TT>
struct List
{
  typedef T head;
  typedef List<TT...> next;
  enum { size = sizeof...(TT)+1 };
};

template<typename T>
struct List<T>
{
  typedef T head;
  typedef void next;
  enum { size = 1 };
};

template<>
struct List<>
{
  typedef void head;
  enum { size = 0 };
};
模板
结构列表
{
T型头;
下一步输入定义列表;
枚举{size=sizeof…(TT)+1};
};
模板
结构列表
{
T型头;
然后输入def void;
枚举{size=1};
};
模板
结构列表
{
typedef空头;
枚举{size=0};
};

模板结构列表
模板结构列表
?谢谢!这就是我错过的!谢谢这就是我错过的!
template<typename T = void, typename... TT>
struct List
{
  typedef T head;
  typedef List<TT...> next;
  enum { size = sizeof...(TT)+1 };
};

template<typename T>
struct List<T>
{
  typedef T head;
  typedef void next;
  enum { size = 1 };
};

template<>
struct List<>
{
  typedef void head;
  enum { size = 0 };
};