C++ 模板与泛型编程详解
一、模板基础概念
1. 模板的定义
模板是C++支持泛型编程的核心机制,允许编写与类型无关的代码。
2. 模板分类
- 函数模板:生成函数的模具
- 类模板:生成类的模具
- 变量模板(C++14):生成变量的模具
- 别名模板(C++11):生成类型别名的模具
二、函数模板
1. 基本语法
template <typename T> T max(T a, T b) { return a > b ? a : b; }
2. 使用示例
int a = 1, b = 2; cout << max(a, b); // 推导为max<int> double x = 1.1, y = 2.2; cout << max(x, y); // 推导为max<double>
3. 模板参数推导
- 编译器根据实参自动推导模板参数类型
- 可显式指定类型:
max<double>(a, b)
三、类模板
1. 基本语法
template <typename T> class Stack { private: std::vector<T> elems; public: void push(T const& elem); T pop(); };
2. 成员函数实现
template <typename T> void Stack<T>::push(T const& elem) { elems.push_back(elem); }
3. 使用示例
Stack<int> intStack; Stack<std::string> stringStack;
四、非类型模板参数
1. 基本概念
模板参数可以是值而非类型
2. 示例
template <typename T, int size> class Array { private: T elems[size]; public: // ... };
3. 使用限制
- 必须是编译期常量
- 只能是整型、枚举、指针、引用等
五、模板特化
1. 全特化
template <> class Stack<std::string> { // 针对string的特化实现 };
2. 偏特化(部分特化)
template <typename T> class Stack<T*> { // 针对指针类型的特化 };