当你骄傲的完成了一段算法代码的时候,其中很多的变量类型已经是确定下来的,也许这段代码也可以用在其他的地方,但是唯独变量的类型需要做一下改变。无性生殖的方法应该是现在很多程序员用来解决这种情况的方式。Template对这种情况作出了精妙的解答。
Template有两种,一种针对function,另一种是针对class。
Template Function用法我举一个简单的例子说明一下:有一个计算数值的幂次方函数,calculater,算法是这样的:
int calculater (int base, int exponent)
{
int result=base;
if(exponent<0)
{
return 0;
}
if(exponent==0)
{
return 1;
}
while(exponent--)
{
result *=base;
}
return result;
}
ok了,现在所有的变量都是int型,那现在我需要长整型的变量应该怎么办呢?无性繁殖吗?可以!
long calculater (long base, int exponent)
{
long result=base;
if(exponent<0)
{
return 0;
}
if(exponent==0)
{
return 1;
}
while(exponent--)
{
result *=base;
}
return result;
}
ok!NOW,咱们用Template来解决一下,calculator的template版:
template <class T> \\这个class不一定是c++里的一个类,<class T>表示:T是一种类型,这种类型只有在调用这个函数的时候才赋予。
T calculator(T base, int exponent)
{
T result=base;
if(exponent<0)
{
return (T)0;
}
if(exponent==0)
{
return (T)1;
}
while(exponent--)
{
result *=base;
}
return result;
}
template函数的调用方法:
void main()
{
int i=calculator(4,5);
long j=calculator((long)10,5);
long double a=calculator((long double)6,2);
}
Template Class的用法是大同小异的,举个例子大家就明白了。
template <class T>
class CTree
{
public:
CTree(T t1, T t2, T t3);
T min();
T max();
private:
T a, b, c, d;
}
实现函数举例:
template <class T>
T CTree<T>::min()
{
T minab=a < b ? a : b;
return minab <c ? minab : c;
}
调用举例:
void main()
{
CTree<int> obj1(2,3,4);
cout<<obj1.min()<<endl;
CTre<float> obj2(4.2,3.4,5.4)
cout<<obj2.min()<<endl;
}
注意一点就是调用时赋值的T必须支持函数中所有算法,否则会出错。其他的完全ok的,这种方法因为有smart技术的支持,所以也不会增大exe文件大小。很不错!!!!