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 个参数。这怎么可能,我在其他地方读到专门化的参数数量较少
以下特化是 Length
对每个类型 Typelist<T, U>
的特化。这对模板参数描述了 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
my question is that primary length template has only 1 parameter (TList) but the specialization has 2 parameters. How is this possible,
这就是部分特化所允许的,模板参数列表必须不同(详情见上文link),但它们必须提供与主模板期望的类型参数相同的数量(Length< Typelist<T, U> >
) .
我刚刚开始学习模板,我正在研究一个实现 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 个参数。这怎么可能,我在其他地方读到专门化的参数数量较少
以下特化是 Length
对每个类型 Typelist<T, U>
的特化。这对模板参数描述了 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
my question is that primary length template has only 1 parameter (TList) but the specialization has 2 parameters. How is this possible,
这就是部分特化所允许的,模板参数列表必须不同(详情见上文link),但它们必须提供与主模板期望的类型参数相同的数量(Length< Typelist<T, U> >
) .