设为首页 加入收藏

TOP

1.2.1 函数模板的实现
2013-10-07 16:29:38 来源: 作者: 【 】 浏览:92
Tags:1.2.1 函数 模板 实现

1.2 初识函数模板

函数模板是C++(www.cppentry.com)模板机制中的一种,其作用是为不同类型的数据生成操作相同或相似的函数。

1.2.1 函数模板的实现

模板以关键字template开头,其后是以一对尖括号划分的模板参数列表。模板参数列表中可以声明多个模板参数,多个参数声明之间以逗号分隔。例1.3是一个可用于在不同类型的数组中寻找最大值的函数模板。

例1.3

  1. template<typename T> 
  2. T const& max_element(T const *l, unsigned sz)  
  3. {  
  4.     T const *max_value(l);  
  5.     for (unsigned i = 1; i < sz; ++i)  
  6.         if (l[i] > *max_value) max_value = &(l[i]);  
  7.     return *max_value;  

例1.3是将例1.1与例1.2中的函数max_element“模板化”。也就是将两者的不同之处——参数及内部数据的类型——提取出来作为模板的参数,然后编译器根据需要将模板参数替换为具体的类型,并根据模板自动生成针对所需类型进行操作的函数模板实例,即真实的函数。

模板参数有多种类型,在例1.3中只用到其中之一,即类型模板参数(有关其他模板参数将在之后详细介绍)。

类型模板参数以关键字typename或者class标记,后接参数名。两个关键字在标记模板参数类型时完全等价,都表示参数为类型参数,本书遵从习惯都用typename标记。参数列表之后为模板的内容。例1.3中声明的是一个函数模板,其后内容便是一个函数声明。

函数模板中的函数体声明与普通函数的写法完全相同。并且,模板参数列表中所声明的类型模板参数可当做一个已知类型来使用。例1.3中函数模板的函数体与例1.1、例1.2的函数代码非常相似,不同之处在于凡是有关列表类型之处,皆由模板类型参数T代替。另外,考虑到列表元素可能为复杂自定义类型,其赋值会导致额外开销,在模板中将max_value改为指针以避免无谓赋值。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1 为什么需要模板 下一篇1.2.2 如何使用函数模板

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: