c++模板的原理与使用
  itL1q2DCWCoh 2023年11月02日 29 0


C++中实现代码复用有两个方式:类的继承(即实现了多态),以及模板的使用。这里介绍的模板的知识。

模板的目的:

同样的代码适用于不同类型下的使用,实现代码的复用目的。

模板的原理:

编译阶段,由编译器根据给如的模板类型确定具体该产生出什么类(当编译器编译到此处才产生出该具体的类),因此,模板的处理其实是编译阶段就完成了,相当于编译器编译阶段自动帮我们生成了大量的不同类型的类的代码,减少了我们的编码量,同时运行时候高效率。所以,c++强大,其实可以说是它的编译器牛逼!

模板的形式:

模板类,模板全局函数,模板类中的成员函数,注意,没有模板成员变量(如果想要成员变量也是模板的,那么就整个类弄成模板类,此时成员函数也可以模板化了)。

模板编写:

模板函数的定义(无论是全局函数还是一个类的成员函数),必须与声明在同一个文件中,不能声明在.h文件,定义写在.cpp文件,这是不可以的,因为编译器编译到该模板函数时候,它需要知道函数的内部实现,根据给入的类型来生成具体的函数,所以没有定义的话就会直接报错了(因为此时编译器是不会去别的文件寻找其定义的,还没到链接阶段呢,更不会寻找其它文件的信息)

template <class Return, class Class>

用class或者typename都可以,一样的作用

模板类定义:

使用的时候,总是需要我们带着Name<Xx, Xx>这样指定传入的类名,因为这样才是一个实际的类,而Name<Xx, Yy>,就跟前面这个类不是同一个类的

模板的特化

模板特化:就是在实例化模板时,对特定类型的实参进行特殊处理,即实例化一个特殊的实例版本。目的:对于一些特殊的类型,仍然能使得保持用户调用接口不变。C++模板(函数模板/类模板)_c++ 模板成员函数_DR5200的博客

模板的使用例子:

这里,我用qt写了个线程管理的例子,封装了一个非常方便的线程类,就是用的模板方式,其中用到了模板类,模板成员函数,值得参考一下:qt自己实现方便的线程管理类_我是标同学的博客

c++模板的使用,需要了解和注意的就是上面这些内容了,关于一些具体知识,可以参考如下博客:

C++——模板(超详细的模板解析)_c++模板___JAN__的博客

qt使用模板template,报错无法解析外部符号_Y_Hanxiao的博客

20200403 - 模板函数实现和声明必须在同一个头文件里_模板函数的声明与实现_baihebeijixing的博客

C++类模板_小梁今天敲代码了吗的博客

C++ 模板(Template)总结,长点小知识_函数_类型_int

C++类模板(模板类)详解

C++模板的使用_c++模板函数调用_sg-expert的博客

C++函数模板_coal miner的博客


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   79   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   56   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   43   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   57   0   0 C++
itL1q2DCWCoh