模板函数与模板类
知识点
- 模板相关概念
- 标准模板库
- 自定义函数模板
- 自定义类模板
- 模板特例化
- 自定模板应用
在 C++ 中跟模板相关的关键字有:template、typename、class。
- template 关键字是声明模板的关键字。
- typename 与 class 在使用模板时的功能是一样的,没有区别。
函数模板格式:
template返回值类型 函数名(参数列表) { // 函数的主体 }
templateT max(const T&a, const T&b) { return a>b?a:b; }
类模板格式:
templateclass 类名 { // 类主体 }
templateclass MyVector { public: MyVector(int len); ~MyVector(); // ... private: T *arr; // ... }
函数模板与模板函数、类模板与模板类
函数模板与模板函数、类模板与模板类在概念上看似很相似,但需要注意这是两个不同的概念。
- 函数模板是编写函数的模板代码。
- 模板函数是指函数模板具体使用时产生带有具体数据类型的函数。
- 类模板是编写的类模板代码。
- 模板类是指使用类模板实例化带有类型的对象。
模板 + 重载 = 模板特例化。
在开发时常规的模板可能无法满足需求,这个时候就需要使用模板特例化,所谓特例化就是重载模板特殊数据类型。
#include#include using namespace std; template T Max(T a, T b) { return a > b ? a : b; } template<> char* Max(char* a, char* b) { return (strcmp(a, b) > 0 ? (a) : (b)); } int main() { float a = 4.7, b = 5; cout << Max(a, b) << endl; cout << Max('a', 'b') << endl; const char* s1 = "hello"; const char* s2 = "world"; cout << Max(s1, s2) << endl; return 0; }
自定义类模板
模板使得程序开发时效率更高,不仅如此,当你自己编写完成一个模板感觉自己做了一件伟大的事情,因为以后再次遇到相同情况时直接使用之前编写好的模板即可,不需要重新开发了。瞬间感觉心情好了很多,以后都不用再做重复的事情了,并且可以按照自己的习惯开发、使用。



