模板可以让你编写通用的、可重用的代码,而无需对每种数据类型编写重复的代码。模板分为两种主要类型:函数模板和类模板。
类模板
#include <iostream>
#include <string>
using namespace std;
template< typename T>
class PrintfEverything{
private:
T data;
public:
void printfEverything(){
cout<<data<<endl;
}
void setEverything(T data){
this->data = data;
}
};
int main()
{
PrintfEverything<int> p1;
p1.setEverything(100);
p1.printfEverything();
PrintfEverything <string> p2;
p2.setEverything("你好");
p2.printfEverything();
return 0;
}
template <typename T>
是类模板的声明。T
是一个占位符,表示将来类实例化时将被实际的数据类型替代。
函数模板
函数模板用于创建能够处理不同数据类型的函数。函数模板的基本语法如下:
使用函数模板时,编译器会根据传入参数的类型自动生成具体的函数版本。
#include <iostream>
#include <string>
using namespace std;
template <typename T>
T mymax(T a,T b)
{
return (a>b)?a:b;
}
int main()
{
int a = 10;
int b = 20;
double x = 1.3;
double y = 2.7;
cout<<mymax(a,b)<<endl;
cout<<mymax(x,y)<<endl;
return 0;
}