前言
C++模板是C++的扩展,模板为C++注入了新的活力。C++模板分为函数模板和类模板。C++模板对于大多数C++程序员并不陌生。C++模板有一定的定制特性。
C++模板的定制一:定制函数模板
函数模板的基本语法如下:
template <typename T>
T fun(T t1,…)
{
return t1;
}
T可以是任何类型,但是当你想为某个特殊的类型做不同的处理时你该怎么办呢?如:
template <typename T>
T max(T t1,T t2,T t3)
{
T temp=t1;
if(temp<t2) temp = t2;
if(temp<t3) temp = t3;
return temp;
}
这个函数可处理三个相同类型的元素并取出其最大值。正常情况下这是对的,但是当有如下的调用发生时就不一定了。
char array1[]=”winmain”;
char array2[]=”yuankai”;
char array3[]=”main”;
char *cp = max(array1, array2, array3);
由于T被做指针传入时,max函数只是比较了指针(地址)的大小而输出最大的指针,这可能不是我们想要的结果。要解决这问题但又要保留原有的函数处理能力我们就可以使用定制函数模板,示例如下:
char * max(char* s1,char* s2,char* s3)
{
char *cp=s1;
if (strcmp(cp,s2)<0) cp = s2;
if (strcmp(cp,s3)<0) cp = s3;
return cp;
}
我们完成一个max函数的定制,定制类型为char*。这样我们再有以下调用则可得出正确的结果。
char *cp = max(array1, array2, array3);
不是吗?我们的输出结果正是我们想要的,通过定制函数模板可完成特定的功能而又可使用其原有的功能,这不是很好吗?了解定制函数模板使我们在使用函数模板时有更大的灵
活性,给我们更大更自由的空间。
文章写的仓促,有错别字或错误请大家多批评指出。欢迎和大家交流。如果大家觉的还可以我会继续写下出(-----袁凯-----)。