C++模板的概念与定义语法

模板

程序 = 算法 + 数据结构

数据结构 : 能够存储任意类型

算 法 : 能够操作存储任意类型数据的数据结构

泛型编程 :将【任意类型】从程序设计中抽象出来

编写与类型无关的通用代码,是代码复用的一种手段,而模板则是泛型编程的基础。

泛型编程并没有减少实际的代码量,只是把重复的代码交给机器自动生产,减少开发人员重复的工作量,极大的提高工作效率。

优势:

  1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生
  2. 增强了代码的灵活性

劣势:

  1. 模板会导致代码膨胀问题,也会导致编译时间变长
  2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误
泛型编程
面向过程编程用【模板】实现函数过程
面向对象编程用【模板】实现类

在这里插入图片描述

template<typename T> 等价于 template<class T>


typename

"typename"是一个C++程序设计语言中的关键字。当用于泛型编程时是另一术语"class"的同义词。这个关键字用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名。

非独立名称就是有依赖关系的名称(个人理解)

typename关键字被引入的理念

在模板定义语法中关键字 class 与 typename 的作用完全一样

那class使用就够了,为什么又引入了新的关键词 typename ,关于这个问题,”Stan Lippman“ 曾在其博客中表示,最早 Stroustrup 使用 class 来声明模板参数列表中的类型是为了避免增加不必要的关键字;后来委员会认为这样混用可能造成概念上的混淆才加上了 typename 关键字。

作用

  • 用于在模板参数列表中定义抽象出的数据类型

  • 告诉 C++ 编译器,typename 后面的字符串为一个类型名称,而不是成员函数或者成员变量,这个时候如果前面没有 typename,编译器没有任何办法知道 T::type 是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不能够通过。

template<typename T>   // 作用一
void func(T p) {
    typename T::type it();   // 作用二
}

// 同理 class

template<class T>
void func(T p) {
    class T::type it();
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值