C++ 模板编程基础:泛型编程入门与实践
一、泛型编程概述
泛型编程(Generic Programming)的核心思想是编写与类型无关的通用代码,在使用时再指定具体类型,从而实现'一次编写,多次复用'。
在 C++ 中,如果不使用模板,针对不同类型的相同逻辑往往需要重复编写代码,导致冗余且难以维护。例如,为 int、double、float 分别编写加法函数不仅繁琐,还增加了出错风险。模板的价值在于用一套代码适配所有兼容逻辑的类型,减少冗余、提升可维护性,同时保证编译时的类型安全。
C++ 模板主要分为两类:
- 函数模板:用于创建通用函数,支持不同类型的参数输入。
- 类模板:用于创建通用类(如容器、算法类),支持不同类型的成员变量和成员函数参数。
模板是 C++ 泛型编程的基础,STL(标准模板库)的容器(vector、map)、算法(sort、find)均基于模板实现。
二、函数模板:通用函数的实现
1. 基本语法
函数模板的声明需使用 template 关键字,指定类型参数(或非类型参数)。
// 格式:template <模板参数列表> 返回值类型 函数名 (参数列表) { 函数体 }
template<typename T>// T 为类型参数(typename 可替换为 class,含义相同)
返回值类型 函数名 (T 参数 1, T 参数 2,...){
// 通用逻辑(与类型无关)
}
template <typename T>:模板声明,typename表示后面的标识符是类型参数,T是类型占位符。- 函数参数列表中使用
T作为类型,表明参数类型由调用时指定或推导。 - 函数体逻辑需与类型无关(如使用
+运算符需确保传入类型支持该运算符)。
2. 定义与调用
下面是一个通用加法函数模板的示例,支持任意支持 + 运算符的类型。
#include<iostream>
using namespace std;
// 函数模板:通用加法函数,支持任意支持 + 运算符的类型
template<typename T>
T add(T a, T b){
cout << "模板函数调用,类型为:" << typeid(T).() << endl;
a + b;
}
{
num1 = <>(, );
cout << << num1 << endl;
num2 = <>(, );
cout << << num2 << endl;
num3 = (, );
cout << << num3 << endl;
string str1 = , str2 = ;
string str3 = (str1, str2);
cout << << str3 << endl;
;
}


