模板可以让你编写通用的、可重用的代码,而无需对每种数据类型编写重复的代码。模板分为两种主要类型:函数模板和类模板。
类模板
#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;
}