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

    文章

    515

    浏览量

    44083
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73636
收藏 人收藏

    评论

    相关推荐

    ADS1299EEGFE-PDK在window上如何通过C++读取8通道数据?

    入手了一块ADS1299EEGFE-PDK,想用这块板做eeg测试,开发语言是c++,window平台,这块板没有提供sdk之类的,怎么获取8个通道的数据,有没有做过的朋友?
    发表于 11-27 06:51

    C7000 C/C++优化指南用户手册

    电子发烧友网站提供《C7000 C/C++优化指南用户手册.pdf》资料免费下载
    发表于 11-09 15:00 0次下载
    <b class='flag-5'>C</b>7000 <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>优化指南用户手册

    C语言和C++中结构体的区别

    同样是结构体,看看在C语言和C++中有什么区别?
    的头像 发表于 10-30 15:11 205次阅读

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    <b class='flag-5'>C</b>7000优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>编译器

    如何学习ARM?

    ARM 处理器架构: 学习 ARM 处理器的架构是学习的核心。ARM 架构有不同的版本,如 ARMv7、ARMv8 等。你可以从学习 ARMv7 开始,逐步深入学习其他版本的细节。
    发表于 10-11 10:42

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都觉得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的优化与整理,已经是非常贴近开发的使用习惯与推理方式。与OpenCV的Mat对象对接方式更是几乎无缝对接,非常的方便好用。
    的头像 发表于 07-26 09:20 895次阅读

    C++语言基础知识

    电子发烧友网站提供《C++语言基础知识.pdf》资料免费下载
    发表于 07-19 10:58 7次下载

    C++中实现类似instanceof的方法

    C++有多态与继承,但是很多人开始学习C++,有时候会面临一个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++ 可以向Java或者Python中有insta
    的头像 发表于 07-18 10:16 582次阅读
    <b class='flag-5'>C++</b>中实现类似instanceof的方法

    嵌入式开发学习

    我在学校专注于学这一门,感觉特别受用,所以想深入学习一些关于嵌入式的一些知识
    发表于 07-09 08:24

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

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C
    的头像 发表于 04-14 11:43 2619次阅读
    鸿蒙OS开发实例:【Native <b class='flag-5'>C++</b>】

    FPGA学习笔记-入门

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

    使用 MISRA C++:2023® 避免基于范围的 for 循环中的错误

    在前两篇博客中,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客中,我们将仔细研究以 C++ 中 for 循环为中心的特定规则。
    的头像 发表于 03-28 13:53 790次阅读
    使用 MISRA <b class='flag-5'>C++</b>:2023® 避免基于范围的 for 循环中的错误

    c语言,c++,java,python区别

    操作系统、嵌入式系统等对性能要求较高的场景。C语言的语法相对简单,学习曲线较平缓,也是学习其他高级语言的入门语言。 C++C++是在
    的头像 发表于 02-05 14:11 2385次阅读

    vb语言和c++语言的区别

    VB语言和C++语言是两种不同的编程语言,虽然它们都属于高级编程语言,但在设计和用途上有很多区别。下面将详细比较VB语言和C++语言的区别。 设计目标: VB语言(Visual Basic)是由
    的头像 发表于 02-01 10:20 2293次阅读

    C++简史:C++是如何开始的

    的 MISRA C++:2023 博客系列的第二部分。 在这篇博客中,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
    的头像 发表于 01-11 09:00 588次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的