[微信公众号:Cpp入门到精通]有完整六十六节知识,STL知识总结,欢迎关注学习!!
模板是一种通用编程工具,允许您编写泛型代码,这样您就可以在不同类型的数据上使用相同的算法或数据结构。模板是一种泛型编程的具体实现,泛型编程是一种通过参数化类型的方式,使得算法和数据结构可以独立于特定的数据类型。
template<typename T>
typename可以改写成class,它们都用于声明模板参数,用于表示类型参数。在一般情况下,typename更明确且更通用。T并不是一个关键字,而是一个通用的占位符,表示“Type”(类型)。这里用T是一种命名惯例,用于表示任意数据类型,在实例化模板时会被具体的数据类型替代。你也可以定义你想要的表示方法。
模板主要有两种类型:函数模板和类模板。
函数模板通过在声明或定义函数时使用模板参数来实现,这些模板参数可以用来表示任意数据类型,这允许您编写可以处理不同数据类型的通用函数。
函数模板的基本语法如下所示(parameter含义为参数):
template <typename T>
void myFunc(T parameter) {
// 函数主体
}
下面我们给一个交换函数模板的例子:
#include<iostream>
using namespace std;
template <typename T>
void Swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int m = 5, n = 10;
Swap(m, n);
cout << "m=" << m << " " << "n=" << n << endl;
double x = 3.14,y = 12.23;
Swap(x, y);
cout << "x=" << x << " " << "y=" << y << endl;
system("pause");
return 0;
}
Swap是一个函数模板,它接受两个参数引用,并交换它们的值。编译器会根据传递的参数类型推导出模板参数 T 的具体类型,从而生成对应的函数实例。
结果如下:
m=10 n=5
x=12.23 y=3.14
类模板通过在类的声明或定义中使用模板参数来实现,这些模板参数用于表示任意数据类型,这允许您定义通用的类,其中的成员变量和成员函数可以使用不同类型的参数。
类模板的基本语法如下所示:
template <typename T>
class MyClass {
public:
T Value;//成员变量
void myFunc(T parameter) {
// 函数主体
}//成员函数
};
下面我们给一个类模板的例子:
#include<iostream>
using namespace std;
template <typename T>
class class1 {
public:
T data;
T getdata() {
return data;
}
};
int main() {
//实例化class1,参数类型为int,实例化对象名为c1
class1<int>c1;
c1.data = 10;
cout << "data=" << c1.getdata() << endl;
//实例化class1,参数类型为double,实例化对象名为c2
class1<double>c2;
c2.data = 12.23;
cout << "data=" << c2.getdata() << endl;
system("pause");
return 0;
}
请重点关注我们如何在主函数中模板实例化,格式怎么写。通过实例化模板,您可以为特定的数据类型创建通用的类。在实例化时,模板参数被具体的类型替代,从而生成实际的类定义。
data=10
data=12.23