文章目录
-
- 概述
- 类模版
-
-
- 1.概述
- 2.语法
-
- 函数模版
-
- 1.概述
- 2.语法
- 综合示例
概述
在C++中,模板(Template)是一种通用的编程工具,允许程序员编写泛型代码,使得类或函数能够适用于多种不同的数据类型而不需要重复编写相似的代码,C++提供了两种主要类型的模板:类模板和函数模板。
类模版
1.概述
类模板允许定义通用的类,其中的成员变量或成员方法的类型由模板参数指定。这样的类可以处理不同类型的数据,而不需要为每个数据类型编写单独的类。
2.语法
template <typename T>
class Box {
private:
T content;
public:
Box(T val) : content(val) {}
T get() const { return content; }
void set(T val) { content = val; }
};
实例化时需要显式指定类型
Box<int> intBox(123);
成员函数定义在类外时,需要再次声明模板参数
template <typename T>
void Box<T>::set(T val) { content = val; }
函数模版
1.概述
定义一个通用的函数,其中某些参数类型或返回值类型暂不确定,由调用时实际传入的参数类型决定
2.语法
template <typename T>
T add(T a, T b) {
return a + b;
}
接调用,编译器根据实参自动推导类型
int result = add(3, 5); // T 推导为 int
double res = add(2.5, 3.7); // T 推导为 double
指定类型
int val = add<int>(3, 5.2); // 强制使用 int,5.2 会转换为 int
综合示例
#include <iostream>
#include <string>
// 函数模板
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 类模板
template <typename T>
class Wrapper {
T value;
public:
Wrapper(T v) : value(v) {};
void print();
};
template <typename T>
void Wrapper<T>::print()
{
std::cout << "Value: " << value << std::endl;
}
int main() {
// 函数模板自动推导
std::cout << max(3, 8) << std::endl; // 8 (int)
std::cout << max(3.14, 2.71) << std::endl; // 3.14 (double)
// 类模板
Wrapper<int> w1(42);
w1.print(); // Value: 42
Wrapper<std::string> w2("Hello");
w2.print(); // Value: Hello
}
运行效果 

