0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++之类模板深入学习的总结

电子设计 来源:电子设计 作者:电子设计 2020-12-24 15:46 次阅读

一、类模板的深入学习:

1、类模板可以定义任意多个不同的类型参数(这一点和模板函数一样)

template < typename T1, typenaem T2 >
class Test

public
void add(T1 a, T2 b);

//定义类对象时
Test

2、类模板可以被特化

指定类模板的特定实现

部分类参数必须显示指定

根据类型参数分开实现类模板

特化前:

template < typename T1, typename T2 >
class Test


};

特化后:

template < typename T >
class Test < T , T >

};

3、类模板的特化类型:

部分特化:用特定的规则约束类型参数

完全特化:完全显示指定类型参数

完全特化前:

template

完全特化后:

template < >
class Test < int, int>

};

代码实践:

#include

输出结果:

root@txp-virtual-machine:/home/txp# ./a.out
void add(T1 a, T2 b)
3.5
void add(T a, T b)
10
class Test < T , T >
void add(void* a, void* b)
error to add void* parm
void add(T1* a, T2* b)
1.1

4、类模板特化注意事项:

(1)特化只是模板的分开实现

本质上是同一个类模板

(2)特化类模板的使用方式是统一的

必须显示指定每一个类型参数

5、类模板特化与重定义有区别吗?函数模板可以特化吗?

(1)重定义和特化的不同:

重定义:

--一个类模板和一个新类(或者两个类模板)

--使用的时候需要考虑如何选择的问题

特化:

--以统一的方式类使用类模板的特化类

--编译器自动优先选择特化类

(2)函数模板只支持参数完全特化

函数模板特化前:

template < typename T >
bool Equal(T a, T b)

return a==b;

函数模板完全特化后:

template < >
bool Euqal

代码实践:

#include

输出结果:

root@txp-virtual-machine:/home/txp# ./a.out
bool Equal(T a, T b)
1
bool Equal

注解:当需要重载函数模板时,优先考虑使用模板特化;当模板特化无法满足需求,再使用函数重载

二、总结:

类模板可以定义任意多个不同的类型参数

类模板可以被部分特化和完全特化

特化的本质是模板的分开实现

函数模板只支持完全特化

工程中使用模板特化代替类(函数)重定义

好了,今天的分享就到这里,如果文章中有错误或者不理解的地方,可以交流互动,一起进步。我是txp,下期见!

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可编程逻辑
    +关注

    关注

    7

    文章

    512

    浏览量

    43906
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
收藏 人收藏

    评论

    相关推荐

    C/C++代码动态测试工具VectorCAST插桩功能演示#代码动态测试 #C++

    C++代码
    北汇信息POLELINK
    发布于 :2024年04月18日 11:57:45

    鸿蒙OS开发实例:【Native C++

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平方根。在输入框中输入两个数字,点击计算结果按
    的头像 发表于 04-14 11:43 691次阅读
    鸿蒙OS开发实例:【Native <b class='flag-5'>C++</b>】

    FPGA学习笔记-入门

    大概10年前,大学同学建议我学习DSP。当因为工作忙,也只是简单学习了DSP的一些基础知识,没有进一步深入学习和时间。结果现在,好像DSP已经不再是主流了,现在有了FPGA。 现在想想,可能没
    发表于 04-09 10:55

    C/C++语言学习大全套

    电子发烧友网站提供《C/C++语言学习大全套.rar》资料免费下载
    发表于 11-18 14:33 0次下载
    C/<b class='flag-5'>C++</b>语言<b class='flag-5'>学习</b>大全套

    如何高效学习Arm架构的v8和v9架构

    深入学习MMU的功能,包括虚拟内存、页表、地址翻译和内存保护。实际操作:配置和使用MMU,了解虚拟内存系统的工作方式。
    的头像 发表于 11-09 12:27 379次阅读
    如何高效<b class='flag-5'>学习</b>Arm架构的v8和v9架构

    PCB设计之深入学习铺铜操作

    在布局和布线都完成之后,就是进行最后一步操作,那就是铺铜。 对于铺铜的操作等会再说,不过对于学习软件来说,自己动手去操作,才是印象最深刻,进步最快的一种方式。 好了,废话不多说,现在来看
    的头像 发表于 11-06 15:20 1526次阅读
    PCB设计之<b class='flag-5'>深入学习</b>铺铜操作

    基于HALCON的模板匹配方法总结

    推荐很早就想总结一下前段时间学习HALCON地心得,但由于其他地事情总是抽不出时间。去年有过一段时间地集中学习,做了许多地练习和实验,并对基于HDevelop地形状匹配算法地参数优化进行了研究,写了
    发表于 09-19 06:13

    TouchGFX中Callback模板实现原理

    的,借助 C++模板特性,TouchGFX 定义了一组Callback 模板,基于此模板来实现上述响应的功能。
    发表于 09-11 06:16

    TouchGFX中Callback模板实现原理

    TouchGFX为MCU带来了炫彩丰富的GUI界面,使得基于STM32芯片的人机界面开发非常方便而友好,TouchGFX是用C++编写的,借助C++模板特性,定义了一组Callback模板
    发表于 09-08 08:16

    通过实验深入学习MOS管

    电路元器件逻辑电路
    学习电子知识
    发布于 :2023年08月14日 20:06:06

    学习FPGA的同学发福利了,附一篇教程下载

    这是国内某培训机构早年的FPGA教程,内容由浅入深,很适合FPGA的学习者使用,本人就是靠它入门和深入学习的,现在贡献出来给大家共同学习
    发表于 08-12 20:35

    如何为Arm编译Cc++代码

    编写CC++应用程序时,需要使用编译器工具链将其编译为机器代码。然后,您可以在基于Arm的处理器上运行此编译的可执行代码,或者使用模型对其进行模拟。 裸机编译编译器工具链包括以下组件: •将C
    发表于 08-02 17:28

    NR RLC部分的学习笔记总结(一)

    之前或多或少有对PHY,MAC及PDCP部分进行了总结,现在开始的是NR RLC部分的学习笔记总结,RLC是很重要的一层
    的头像 发表于 07-17 17:50 1694次阅读
    NR RLC部分的<b class='flag-5'>学习</b>笔记<b class='flag-5'>总结</b>(一)

    一起探索C++的世界!

    C++
    YS YYDS
    发布于 :2023年07月07日 19:10:25

    深入浅出OkHttp源码解析及应用实践

    OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平。
    的头像 发表于 06-08 15:47 352次阅读
    <b class='flag-5'>深入</b>浅出OkHttp源码解析及应用实践