Ubuntu C++如何使用模板类和函数
C++模板是泛型编程的核心,允许编写与类型无关的代码,避免重复定义。在Ubuntu环境下,通过模板函数swapValues演示交换任意类型变量,模板类可类似实现通用数据结构,提升代码复用性与灵活性。
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 和可变参数模板——不过那是后面的进阶话题了。
IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。
JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。
JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。
JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,
PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,
PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,













