发布于2026-07-13 阅读(0)
扫一扫,手机访问
C++ 的模板,说白了就是让你写出“与类型无关”的代码。什么意思?你写一个函数或者一个类,不需要提前把类型定死——int、double、string,甚至是自定义类型,都可以往里塞。这在很多场景下能省下大量重复代码。下面就在 Ubuntu 环境下,用两个最典型的例子把模板函数和模板类讲清楚。

先看模板函数。最常见的场景是交换两个变量的值。你当然可以为每种类型写一个 swap,但有了模板,一行定义就够了:
#include
// 模板函数,用于交换两个变量的值
template
void swapValues(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
std::cout << "Before swap: x = " << x << ", y = " << y << std::endl;
swapValues(x, y); // 使用模板函数交换x和y的值
std::cout << "After swap: x = " << x << ", y = " << y << std::endl;
double a = 1.5, b = 2.5;
std::cout << "Before swap: a = " << a << ", b = " << b << std::endl;
swapValues(a, b); // 使用模板函数交换a和b的值
std::cout << "After swap: a = " << a << ", b = " << b << std::endl;
return 0;
}
把上面这段代码存成 swap.cpp,然后在 Ubuntu 终端里编译运行,命令很简单:
g++ -o swap swap.cpp
./swap
编译器会根据你传入的参数类型,自动生成对应版本的 swapValues。int 和 double 都能用,完全不需要你手动写两份。
接下来是模板类。假设你想实现一个简单的动态数组,能装任何类型的元素——用模板类来做最直接:
#include
// 模板类,用于表示一个动态数组
template
class Array {
private:
T* data; // 指向动态数组的指针
size_t size; // 数组的大小
public:
// 构造函数
Array(size_t size) : size(size) {
data = new T[size];
}
// 析构函数
~Array() {
delete[] data;
}
// 获取数组大小
size_t getSize() const {
return size;
}
// 重载下标运算符
T& operator[](size_t index) {
return data[index];
}
// 常量版本的重载下标运算符
const T& operator[](size_t index) const {
return data[index];
}
};
int main() {
Array intArray(5); // 创建一个可以存储5个整数的数组
intArray[0] = 1;
intArray[1] = 2;
std::cout << "First element of intArray: " << intArray[0] << std::endl;
Array stringArray(3); // 创建一个可以存储3个字符串的数组
stringArray[0] = "Hello";
stringArray[1] = "World";
std::cout << "First element of stringArray: " << stringArray[0] << std::endl;
return 0;
}
保存为 array.cpp 后,同样用 g++ 编译:
g++ -o array array.cpp
./array
这个 Array 类在实例化时指定具体类型,比如 Array 和 Array,内部存储的数据类型就跟着变了。模板类的灵活性就在这里——一套代码,适配无数种类型。你完全可以基于这个思路,扩展出更复杂的容器或算法,只要记住模板的声明放在头文件里,实现和定义通常不分开(否则链接会报错),这一点和普通类不太一样。
以上两个例子覆盖了模板最核心的两种用法。Ubuntu 下的编译环境很标准,g++ 对 C++11/14/17 支持都很好,你可以放心把模板代码写得更现代一些,比如用 auto、decltype 和可变参数模板——不过那是后面的进阶话题了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8