我正在读取stl_construct.h中的一些源代码,
在大多数情况下,它具有<>
我看到一些只有“template<> ...
”的行。
这是什么?
答案 0 :(得分:10)
这意味着接下来的是template specialization。
答案 1 :(得分:2)
这是一个带有空模板参数列表的 Explicit Specialization。
当您使用给定的模板参数集实例化模板时,编译器会根据这些模板参数生成新定义。但是有一种设施可以覆盖定义生成的这种行为。而不是生成定义的编译器我们可以指定编译器应该为给定的模板参数集使用的定义。这称为显式专业化。
template<>
前缀表示以下模板声明不带模板参数。
明确的专业化可以应用于:
答案 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
};