#include <iostream>
using namespace std;
template <class T> inline T Max(T a, T b) { return a > b ? a : b; }
int main() { int a = 1, b = 2;
cout << Max(a, b) << endl; cout << Max(1.0, 2.0) << endl; cout << Max("hello", "world") << endl;
return 0; } |
2.类模板
#include <iostream>
using namespace std;
template <class T> class A { private: T a; public: A(T x) { a = x; } T get() { return a; } };
int main() { A<double> a(10);
cout << a.get() << endl;
return 0; }
|
3.模板特殊化:当你在使用一个模板,而又想对某一个特殊的类型做不同的实现时,就需要一个特殊化的模板声明。
// template specialization #include <iostream> using namespace std;
// class template: template <class T> class specTemplate { T m_var; public: specTemplate (T inData) { m_var = inData; } T increase () { return ++m_var; } };
// class template specialization: template <> class specTemplate <char> { char m_var; public: specTemplate (char arg) { m_var = arg; } char upperCase () { if ((m_var >= 'a') && (m_var <= 'z')) m_var += 'A'-'a'; return m_var; } };
int main () { specTemplate<int> myint (7); specTemplate<char> mychar ('j');
cout << myint.increase() << endl; cout << mychar.upperCase() << endl; return 0; }
|
4.模板默认值:
template <class T = char, int N = 10> class Test {..};
|
1)模板的类型也可有默认值;
2)模板的类型也可以是regular type,并非一定是以class或typename修饰的类型;