此网站为连连棋牌演示网站
当前位置:首页 > C++ > 正文

C++ 模板

10-13 C++

  模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

  模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。

  在这里,type 是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。

  正如我们定义函数模板一样,我们也可以定义类模板。泛型类声明的一般形式如下所示:

  在这里,type是占位符类型名称,可以在类被实例化的时候进行指定。您可以使用一个逗号分隔的列表来定义多个泛型数据类型。

  下面的实例定义了类 Stack,并实现了泛型方法来对元素进行入栈出栈操作:

  在 C++ Template 中很多地方都用到了 typename 与 class 这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?

  相信学习 C++ 的人对 class 这个关键字都非常明白,class 用于定义类,在模板引入 c++ 后,最初定义模板的方法为:

  这里 class 关键字表明T是一个类型,后来为了避免 class 在这两个地方的使用可能给人带来混淆,所以引入了 typename 这个关键字,它的作用同 class 一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:

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

  typename 难道仅仅在模板定义中起作用吗?其实不是这样,typename 另外一个作用为:使用嵌套依赖类型(nested depended name),如下所示:

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

  函数模板可以重载,只要它们的形参表不同即可。例如,下面两个模板可以同时存在:

版权保护: 本文由 首页 原创,转载请保留链接: http://www.wsxzr.com/News/235.html

博客主人bfyysw
男,文化程度不高性格有点犯二,已经20来岁至今未婚,闲着没事喜欢研究各种代码,资深技术宅。
  • 文章总数
  • 43823访问次数
  • 建站天数
  • 标签