模板偏特化 指针 模板萃取 指针

C++相关语法基础

模板特化(template specialization)

通用模板对于某种特定的类型可能是错误的,所以可能需要对特定的类型单独定义模板的实现。另一方面,可以利用特定类型的特点进行优化。

模板特化是指这样一个定义,该定义指定一个或多个模板的形参实际类型或值。 形式如下:

  • template<>
  • 模板名(可以是函数或类)加一对尖括号,尖括号中指定模板形参的实际类型。
  • 函数形参表和函数体或类定义。

示例:

1
2
3
4
5
6
7
8
9
10
11
template <class T1, class T2>
class some_template
{
  // ...
};

template <>
class some_template<string, int>
{
  // ...
};

类模板的部分特化(partial specialization)

部分特化是指针对template参数更进一步的条件限制所涉及出来的一个特化版本。 这里的更进一步的条件限制并不仅限于指定模板形参的实际类型。 编译器在实例化时,优先使用特化的版本。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T1, class T2>
class some_template
{
  // ...
};

template <class