函数模板
1 #include <iostream> 2 3 using namespace std; 4 5 template<typename A>A Max(A a, A b); 6 7 int main() 8 { 9 double x, y; 10 cin >> x >> y; 11 cout << "The max is:" << Max(x, y) << endl; 12 13 int m, n; 14 cin >> m >> n; 15 cout << "The max is:" <<Max(m, n) << endl; 16 17 long i, j; 18 cin >> i >> j; 19 cout << "The max is" <<Max(i, j) << endl; 20 21 return 0; 22 } 23 template<typename A>A Max(A a, A b){ 24 return a > b ? a : b; 25 }
1.template <typename 类型参数1 , typename 类型参数2 , ...> 返回值类型 函数名(形参列表){
//在函数体中可以使用类型参数
}
2.typename也可以使用class替代
类模板
1.template<typename 类型参数1 , typename 类型参数2 , …> class 类名{
//TODO:
};
2.
自例
1 #include <iostream> 2 3 using namespace std; 4 5 template<typename T1,typename T2> 6 class Point{ 7 public: 8 Point(T1 x, T2 y):m_x(x), m_y(y){} 9 public: 10 T1 getx() const; 11 void setx(T1 x); 12 T2 gety() const; 13 void sety(T2 y); 14 private: 15 T1 m_x; 16 T2 m_y; 17 }; 18 19 template<typename T1,typename T2> 20 T1 Point<T1, T2>::getx() const{ 21 return m_x; 22 } 23 24 template<typename T1,typename T2> 25 void Point<T1, T2>::setx(T1 x){ 26 m_x = x; 27 } 28 29 template<typename T1,typename T2> 30 T2 Point<T1, T2>::gety() const{ 31 return m_y; 32 } 33 34 template<typename T1,typename T2> 35 void Point<T1, T2>::sety(T2 y){ 36 m_y = y; 37 } 38 39 int main() 40 { 41 Point<int, int> p1(10, 20); 42 cout << p1.getx() << p1.gety() << endl; 43 44 Point<int, char*> p2(20, "东京20°"); 45 cout << p2.getx() << p2.gety(); 46 47 return 0; 48 }
大话模板编程(选读)
1.站在变量定义和类型转换角度:
强类型语言:在定义变量时需要显示指明数据类型(C/C++,Java,C#等)
弱类型语言:~~(JavaScript,Python,PHP,Ruby,shell等)
从编译运行角度:
强类型语言在编译期间就能确认变量类型,但C/C++有时候并不会,所以,在这方面,C/C++是弱类型语言
2.不管是强类型语言还是弱类型语言,在编译器(解释器)内部都有一个类型系统来维护变量的各种信息。
3.强类型语言较为严谨,在编译时就能发现很多错误,适合开发大型的、系统级的、工业级的项目;而弱类型语言较为灵活,编码效率高,
部署容易,学习成本低,在 Web 开发中大显身手。另外,强类型语言的 IDE 一般都比较强大,代码感知能力好,提示信息丰富;而弱类型
语言一般都是在编辑器中直接书写代码。
4.模板所支持的类型是宽泛的,没有限制的,我们可以使用任意类型来替换,这种编程方式称为泛型编程(Generic Programming)。