模板函数分析

来源:互联网 发布:淘宝主机烈士墙 编辑:程序博客网 时间:2024/06/08 04:36

  模板函数是通用的函数描述,其形式如下:

teplate<tyname(class) anytype> //这样就指出了要建立一个模板并将类型命名为anytype。template是关键字,typename是必须的,可以使用关键字class代替typename

并非所有的模板参数都必须是模板参数类型,也可以是内置类型。

如:template<class T>

void fun(T*a,int b);  //这样也是允许的

  但是模板具有很大的局限性,它无法处理某些类型

如:void fun(T a,T b) {a=b}

如果T为数组类型就无法处理,所以C++提供的解决方案是为特定类型提供具体化的模板定义-----称为显示具体化

例如为一个名为A的类提供具体化模板类型定义如下:

template<>void fun(A a,A b);//这样便可以解决局限性问题

  注意对于给定的函数名,可以有非模板函数,模板函数和显示具体化模板函数,它们间的优先级为非模板>显示具体化模板>模板函数。

  在说模板的实例化,最初编译器只能通过隐式实例化来使用模板生成函数,但现在C++还允许显示实例化,显示实例化如下:

template void fun<int>(int,int);//注意与显示具体化的区别!


  最后我们应该知道在代码中包含函数模板本身并不会生成函数定义,它只是一个用于生成函数定义的方案,只有使用模板实例的才是函数定义!

原创粉丝点击