前言:
C++的模板在是泛型编程的重要组成部分,编写在不同类型上工作的代码,而无需为每个类型编写重复的代码,这有助于减少代码冗余并提高代码的可维护性。
模板
模板的介绍
- C++模板是一种强大的编程技术,它允许程序员编写与类型无关的代码,即泛型编程。
- 模板可以用于定义泛型函数和类,这些函数和类可以在编译时根据实际使用的数据类型进行实例化。
- 模板的使用提高了代码的复用性和灵活性,减少了冗余代码的编写
模板分类
函数模板
函数模板的定义通常包含以下几个部分:
- template关键字:表示接下来的声明是一个模板。
- 模板参数列表:位于尖括号
<>
中,可以包含类型参数和非类型参数。 - 函数声明和定义:与普通函数类似,但使用模板参数列表中的类型来定义函数。
#include <iostream>
//函数模板
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
int x = 10, y = 20;
double d1 = 1.5, d2 = 2.5;
std::cout << "Adding two integers: " << add(x, y) << std::endl;
std::cout << "Adding two doubles: " << add(d1, d2) << std::endl;
return 0;
}
类模板
类模板的定义与函数模板类似,但用于定义类结构。以下是一个简单的类模板示例:
#include <iostream>
template <typename T>
class SimpleContainer {
private:
T data;
public:
SimpleContainer(T value) : data(value) {
}
T getData() const {
return data; }
void setData(T value) {
data = value; }
};
int main() {
SimpleContainer<int> intContainer(10);
std::cout << "Integer data: " << intContainer.getData() << std::endl;
SimpleContainer<double> doubleContainer(3.14);
std::cout << "Double data: " << doubleContainer.getData() << std::endl;
return 0;
}
在这个例子中,SimpleContainer
是一个类模板,它可以用于任何数据类型T
。当在main
函数中创建SimpleContainer
的实例时,编译器会根据提供的类型参数自动生成相应的类实例。
类模板的成员函数
类模板的成员函数可以是模板函数,也可以是普通函数。模板成员函数在类模板的定义中直接声明,而普通成员函数可以在类模板外定义,此时需要显式指定模板参数。
template <typename