C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化相关的知识,希望对你有一定的参考价值。
1. 场景
//第一个版本;可以比较任意两个类型
template <typename T> int compare (const T &, const T & );
//第二个版本处理字符串字面常量
template<size_t N, size_t M> int compare (const char ( & ) [N], const char ( & ) [M] );
const char *pl = "hi", *p2 = "mom";
compare (pi, p2 );// 调用第一个模板
compare ("hi", "mom" } ;// 调用有两个非类型参数的版本
2. 解决
当我们不能( 或不希望) 使用模板版本时, 可以定义类或函数模板的个特例化版本
- 一个特例化版本就是模板的一个独立的定义, 在其中一个或多个模板参数被指定为特定的类型
- 当我们特例化一个函数模板时, 必须为原模板中的每个模板参数都提供实参。
// compare 的特殊版本, 处理字符数组的指针
template <> int compare (const char* const &pl, const char* const &p2)
{
return strcmp (pi, p2);
}
当我们定义一个特例化版本时, 函数参数类型必须与一个先前声明的模板中对应的类型匹配。
template int compare (const T &, const T & );// T 为 const char *
2.1 函数重载与模板特例化
一个特例化版本本质上是一个实例, 而非函数名的一个重载版本。
特例化的本质是实例化一个模板, 而非重栽它 D 因此, 特例化不影响函数匹配
以上是关于C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 16 模板和泛型编程)std::move
C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化
C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化
C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化