![](/img/trans.png)
[英]c++ template function specialization - wrong number of template arguments?
[英]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>
,并且T
和U
是类型。
首先 :
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.