什么是模板<> (在<>中没有任何T类)是什么意思?

时间:2012-05-21 09:12:09

标签: c++ templates

我正在读取stl_construct.h中的一些源代码, 在大多数情况下,它具有&lt;&gt; 我看到一些只有“template<> ...”的行。 这是什么?

3 个答案:

答案 0 :(得分:10)

这意味着接下来的是template specialization

答案 1 :(得分:2)

猜猜,我完全误读了Q并回答了一些没有被问到的问题 所以我在这里回答问的问题:

这是一个带有空模板参数列表的 Explicit Specialization

当您使用给定的模板参数集实例化模板时,编译器会根据这些模板参数生成新定义。但是有一种设施可以覆盖定义生成的这种行为。而不是生成定义的编译器我们可以指定编译器应该为给定的模板参数集使用的定义。这称为显式专业化

template<>前缀表示以下模板声明不带模板参数。

明确的专业化可以应用于:

  • 功能或类模板
  • 课程模板的会员功能
  • 类模板的静态数据成员
  • 课程模板的成员类
  • 类模板的成员函数模板&amp;
  • 类模板的成员类模板

答案 2 :(得分:0)

这是一个模板专业化,其中所有模板参数都已完全指定,并且<>中没有任何参数。

例如:

template<class A, class B>   // base template
struct Something
{ 
    // do something here
};

template<class A>            // specialize for B = int
struct Something<A, int>
{ 
    // do something different here
};

template<>                   // specialize both parameters
struct Something<double, int>
{ 
    // do something here too
};