C++1114新标准——模板模板参数(Template Template Parameter)、using

系列文章目录

C++11&14新标准——Variadic templates(数量不定的模板参数)
C++11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit
C++11&14新标准—— =delete、=default
C++11&14新标准——模板模板参数(Template Template Parameter)、using


文章目录

  • 系列文章目录
    • 1. 模板模板参数(Template Template Parameter)
    • 2. Using
      • Using、#define、typedef


1. 模板模板参数(Template Template Parameter)

   模板模板参数(Template Template Parameter)的意思是在原有的模板参数的基础上,在内部再嵌入一个模板参数,实现一些模板容器的功能。
   例如下图的test_moveable函数,内部需要一个模板容器,容器成员类型也为模板,如果直接使用两个模板参数,这样是行不通的,报错信息为:Container不是一个模板。
在这里插入图片描述
   但可以通过模板参数+迭代器+萃取器的方法,实现这个功能。输入一个模板容器,通过对这个模板容器的迭代器进行萃取,得到迭代器所指类型的型别,实现这个功能,这是一种可行的方法。
在这里插入图片描述
   但更好的方式是使用模板模板参数。可以看到container既是一个模板参数,同时他自身也是一个模板,这样就可以实现模板容器。
在这里插入图片描述

2. Using

上文设计好XCIs类之后,尝试用vector去实例化一个对象,但会发现报错。
在这里插入图片描述
这其实是因为我们的XCIs类第二个模板参数container,他自身作为一个模板只能接受一个参数,但vector其实有两个参数——数据类型和分配器,第二个参数有默认值。
在这里插入图片描述
这时候就可以通过using关键词,将之前的两参数容器提前处理,变为单一参数模板,从而可以正常实例化。
在这里插入图片描述
在这里插入图片描述

Using、#define、typedef

#define是一个预处理指令,用于进行文本替换,不仅仅用于定义类型别名,还可用于宏定义、条件编译等。

#define MyInt int
#define DoubleVector std::vector<double>

typedef是传统的 C++ 中用于定义类型别名的关键字,它在 C++98 就已存在,typedef 用于给类型起别名。

typedef int MyInt;
typedef std::vector<double> DoubleVector;

using 是 C++11 引入的关键字,用于定义类型别名。它提供了更直观、类型安全的方式来定义别名。格式为:

using MyInt = int;
using DoubleVector = std::vector<double>;

using最大的特点就是支持模板操作,可以用于模板别名,支持模板参数的自动推导。这也是他与typedef最大的区别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277854.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中日志的使用log4j2

SpringBoot中日志的使用log4j2 1、log4j2介绍 Apache Log4j2 是对 Log4j 的升级&#xff0c;它比其前身 Log4j 1.x 提供了重大改进&#xff0c;并提供了 Logback 中可用的许多改 进&#xff0c;同时修复了 Logback 架构中的一些问题&#xff0c;主要有&#xff1a; 异常处理…

SpringBoot+线程池实现高频调用http接口并多线程解析json数据

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)&#xff1a; SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…

如何了解蜘蛛池蚂蚁SEO

蜘蛛池是一种基于搜索引擎优化的技术手段&#xff0c;通过模拟蜘蛛爬行行为来提高网站在搜索引擎中的排名&#xff0c;从而增加网站的流量和曝光率。 编辑搜图 如何联系蚂蚁seo&#xff1f; baidu搜索&#xff1a;如何联系蚂蚁SEO&#xff1f; baidu搜索&#xff1a;如何联…

vivado约束方法6

生成的时钟 定时约束向导建议在的输出上创建一个生成的时钟顺序单元&#xff0c;当它直接或通过驱动其他顺序单元的时钟引脚时一些互连逻辑。与PLL或MMCM不同&#xff0c;用户逻辑不能将主时钟&#xff0c;因此向导仅提供指定除法系数的选项&#xff0c;如中所示如下图所示&am…

CSS中神奇的filter属性

CSS是Web开发中不可或缺的一部分&#xff0c;它可以帮助开发者在页面上添加各种各样的样式和效果。其中一个比较神奇的CSS属性就是filter&#xff0c;它可以让我们实现各种有趣的图形处理效果。 一、filter属性的基础 filter属性是CSS中用于对元素进行图形效果处理的属性之一…

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】

LeetCode-42. 接雨水【栈 数组 双指针 动态规划 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;单调栈&#xff0c;维护一个单调递减栈。每当遇到当前元素大于栈顶元素就出栈&#xff0c;在出栈时更新答案。当遇到出栈的情况&#xff0c;若单调栈栈左边有一个元素则必有…

laravel的安装

laravel的安装&#xff08;Composer小皮&#xff09; Composer的安装 windows下安装 https://getcomposer.org/Composer-Setup.exe 修改镜像 阿里云&#xff1a; composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 华为云&#xff1a; compos…

SQL进阶理论篇(五):什么是Hash索引

文章目录 简介MySQL中的Hash索引与B树的区别总结参考文献 简介 hash&#xff0c;即哈希&#xff0c;也被称为是散列函数。 Hash在数据库中的应用&#xff0c;可以帮助我们大幅度提升检索数据的效率。 大名鼎鼎的MD5其实就是Hash函数的一种变体。 Hash算法&#xff0c;是通过…

电商控制台前台整合优化

前台逻辑 显示商品菜单输入id&#xff0c;进入某个商品检测登录和注册 根据登录和注册的状态&#xff0c;订单或者是购物车都需要登录。 登录&#xff1a;生成订单&#xff08;先生成订单表&#xff0c;再生成订单详情表&#xff09; 开发直接购买&#xff0c;加入购物车, …

ETL.NET 助力海量数据轻松处理

ETL.NET 助力海量数据轻松处理 什么是 ETL & EtlT &#xff1f;About ETLAbout EtlT 谈谈 ETL 作用ETL 对企业的作用ETL 对个人职业发展的作用 ETL.NET 介绍ETL.NET 功能特点1、它包含 SSIS 的所有转换和功能2、开箱即用的功能 如何使用 ETL.NET ?ETL.NET 相关资源Paillav…

一分钟教你打造高效接口文档(Swagger+knife4j)

在前后端分离开发过程中&#xff0c;前端人员和后端人员要进行配合来共同完成一个开发任务&#xff0c;这个时候需要使用到接口&#xff08;API接口&#xff1a;是一个http的请求地址&#xff0c;主要是定义&#xff1a;请求路径、请求方式、请求参数、响应数据等内容&#xff…

SpringIOC之Jsr330ScopeMetadataResolver

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…