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

模板

程序 = 算法 + 数据结构

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

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

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

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

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

优势:

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

劣势:

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

在这里插入图片描述

扫描二维码关注公众号,回复: 15058794 查看本文章

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();
}

猜你喜欢

转载自blog.csdn.net/qq_40342400/article/details/128254202