繁体   English   中英

C ++模板专业化和模板参数数量

[英]c++ template specialization and number of template arguments

我刚刚开始学习模板,我正在看一个实现TypeList的示例,并看到了TypeList的Length方法的实现。

template <class TList> struct Length;
template <> struct Length<NullType>
{
    enum { value = 0 };
};

template <class T, class U>
struct Length< Typelist<T, U> >
{
    enum { value = 1 + Length<U>::value };
};

我的问题是主要长度模板只有1个参数(TList),但是专业化却有2个参数。 这是怎么可能的,我在其他地方读到专业化具有较少的参数数量

下面的专业化是每种类型Typelist<T, U>Length的专业化。 这对模板参数描述了TypeList<T, U> ,这显然需要两个参数。 它没有直接定义Length的模板参数。

template <class T, class U>
struct Length< Typelist<T, U> >
{
    enum { value = 1 + Length<U>::value };
};

对于template <class TList> struct Length; 专业化定义TList = Typelist<T, U> ,并且TU是类型。

首先 :

template <> struct Length<NullType>

是完全专业化,第二个:

template <class T, class U>
struct Length< Typelist<T, U> >

是部分专业化。

通过完全专业化,可以给出要进行专业化处理的确切类型。 使用部分专业化,您可以允许所有遵守某些限制的类型,在这种情况下,它可以创建类型: Typelist<T, U> ,还必须提供两个模板类型参数。

有关更多详细信息,请参见此处:

http://en.cppreference.com/w/cpp/language/template_specialization http://en.cppreference.com/w/cpp/language/partial_specialization

我的问题是主要长度模板只有1个参数(TList),但是专业化却有2个参数。 这怎么可能,

多数民众赞成在部分专业化允许的范围内,模板参数列表必须有所不同(有关详细信息,请参见上面的链接),但是它们必须提供与主模板期望的数量相同的类型参数( Length< Typelist<T, U> > )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM