1.什么是模板?先介绍和类对象无关的模板。
我们可以用
template<class T>
const T& min(const T& a, const T& b)
{return (a<b) ? a : b;}
来代替宏,且刚好在这种情况下,两种写法刚好等效
#define min(a,b) ( ( (a) < (b) )? (a) : (b) )
但是模板不是宏,更像编译器内部的复制粘帖,为我们准备好我们需要的东西
上面的模板可以在编译器中扩展为char类型或其它int之类的类型【当我们使用了某种类型,编译器便生成一个对应版本】
const char min(const char& a, const char& b)
{return (a<b) ? a : b;}
这就是模板,但模板不止能“复制函数”,也能复制类的一些参数,例如我们今天学的 模板类。
如何使用模板?
template <class R, class T1, class T2>
R add2 (const T1& s1, const T2& s2)
{return static_cast<R> (s1+s2);
add<double> (1.1,2.2)
add<int> (1.1,2.2)
因为T1和T2被编译器识别了,所以不用写成
add<