C++标准模板(STL)- 类型支持 (杂项变换,基于编译时布尔值选择一个类型或另一个,std::conditional)

类型特性

类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

定义于<type_traits>头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
 

杂项变换

基于编译时布尔值选择一个类型或另一个

std::conditional

template< bool B, class T, class F >
struct conditional;

(C++11 起)

提供成员 typedef type ,若 B 在编译时为 true 则定义为 T ,或若 B 为 false 则定义为 F

成员类型

成员类型定义
type若 B == true 则为 T ,若 B == false 则为 F

辅助类型

template< bool B, class T, class F >
using conditional_t = typename conditional<B,T,F>::type;

(C++14 起)

可能的实现

template<bool B, class T, class F>
struct conditional { typedef T type; };template<class T, class F>
struct conditional<false, T, F> { typedef F type; };

调用示例

#include <iostream>
#include <type_traits>
#include <typeinfo>struct A
{
};struct B
{
};int main()
{typedef std::conditional<true, int, double>::type Type1;typedef std::conditional<false, int, double>::type Type2;typedef std::conditional<sizeof(int) >= sizeof(double), int, double >::type Type3;typedef std::conditional<false, A, B>::type Type4;typedef std::conditional<true, std::string, char*>::type Type5;std::cout << "std::conditional<true, int, double>::type:    "<< typeid(Type1).name() << std::endl;std::cout << "std::conditional<false, int, double>::type:   "<< typeid(Type2).name() << std::endl;std::cout << "std::conditional<sizeof(int)>=sizeof(double),int,double>::type:"<< typeid(Type3).name() << std::endl;std::cout << "std::conditional<false, A, B>::type:          "<< typeid(Type4).name() << std::endl;std::cout << "std::conditional<true, std::string, char*>::type: "<< typeid(Type5).name() << std::endl;return 0;
}

输出

std::conditional<true, int, double>::type:    i
std::conditional<false, int, double>::type:   d
std::conditional<sizeof(int)>=sizeof(double),int,double>::type:d
std::conditional<false, A, B>::type:          1B
std::conditional<true, std::string, char*>::type: NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

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

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

相关文章

【唐山海德教育】一级建造师社保需交满多少年

一建对社保缴纳年限的要求需要具体看各省份的报考通知&#xff0c;因为不同地区要求不一致。 一般来说要在报考所在地交满一年以上的社保才行&#xff0c;但也有要求缴纳满4年的&#xff0c;也有对社保没有缴纳年限要求的省份&#xff0c;这个就要考生自己咨询当地人事考试中心…

基于Java SSM框架实现弹幕视频网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现弹幕视频网站系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;弹幕视频网站当然也不能排除在外。弹幕视频网站是以实际运用为开发背景&…

DBSCAN聚类算法学习笔记

DBSCAN聚类算法学习笔记 一些概念名词 MinPts&#xff1a;聚类在一起的点的最小数目&#xff0c;超过这一阈值才算是一个族群 核心点&#xff1a;邻域内数据点超过MinPts的点 边界点&#xff1a;落在核心点邻域内的点称为边界点 噪声点&#xff1a;既不是核心点也不是边界点的…

CGAL的泊松曲面重构

1、介绍 该CGAL组件实现了一种曲面重建方法&#xff0c;该方法将具有定向法线的点集作为输入&#xff0c;并计算隐式函数。我们假设输入点不包含异常值和少量噪声。通过使用CGAL曲面网格生成器[4]或可能使用任何其他曲面轮廓算法提取该函数的等值面来生成输出曲面网格。 更具体…

如何在业务中体现 TCC 事务模型?

在分布式系统设计中&#xff0c;随着微服务的流行&#xff0c;通常一个业务操作被拆分为多个子任务&#xff0c;比如电商系统的下单和支付操作&#xff0c;就涉及到了创建和更新订单、扣减账户余额、扣减库存、发送物流消息等&#xff0c;那么在复杂业务开发中&#xff0c;如何…

VSCode 创建工作区,多文件夹终端切换

VSCode 创建工作区的好处有以下几点&#xff1a; 项目结构清晰&#xff1a;每个工作区都有自己的文件夹结构&#xff0c;可以更好地组织和管理项目文件。版本控制&#xff1a;VSCode 支持多种版本控制系统&#xff0c;如Git&#xff0c;可以在工作区内进行代码的版本管理。插件…

Linux驱动开发学习笔记2《LED驱动开发试验》

目录 一、Linux下LED灯驱动原理 1.地址映射 二、硬件原理图分析 三、实验程序编写 1.LED 灯驱动程序编写 2.编写测试APP 四、运行测试 1.编译驱动程序和测试APP &#xff08;1&#xff09;编译驱动程序 &#xff08;2&#xff09;编译测试APP 2.运行测试 一、Linux下…

探究Spring Boot 中实现跨域的几种方式

文章目录 前言1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置3. 使用Filter配置4. 使用全局配置结束语 前言 在现代Web应用中&#xff0c;由于安全性和隐私的考虑&#xff0c;浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资…

编程实战:类C语法的编译型脚本解释器(九)编译语句

系列入口&#xff1a;编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 前文已经介绍了编译入口&#xff0c;核心就是语句&#xff0c;本文介绍语句的编译。 目录 一、代码概览 二、辅助函数 2.1 tokens.IsPosNotToken(pos) 2.2 toke…

【华为OD题库-074】VLAN资源池-Java

题目 VLAN是一种对局域网设备进行逻辑划分的技术&#xff0c;为了标识不同的VLAN&#xff0c;引入VLAN ID(1-4094之间的整数)的概念。定义一个VLAN ID的资源池(下称VLAN资源池)&#xff0c;资源池中连续的VLAN用开始VLAN-结束VLAN表示&#xff0c;不连续的用单个整数表示&#…

第4节:Vue3 布尔属性

使用v-bind指令将布尔属性绑定到元素上。以下是一个简单的实例&#xff1a; <template><view class"container"><text v-bind:is"isActive">{{ message }}</text><button click"toggleActive">切换激活状态</…

LT8668SXC DP转VBO/HDMI2.1/EDP 最高可支持到8k60hz

DP1.4a/eDP1.4b Receiver ▪ Compliant with DisplayPort specification 1.4a for 1.62Gbps, 2.7Gbps, 5.4Gbps and 8.1Gbps ▪ Compliant with Embedded DisplayPort specification version 1.4b ▪ Support DisplayPort 1/2/4 lanes ▪ Support HDCP 1.3/2.3 ▪ …

JVM 执行引擎篇

机器码、指令、汇编语言 机器码 各种用二进制编码方式表示的指令&#xff0c;叫做机器指令码。开始&#xff0c;人们就用它采编写程序&#xff0c;这就是机器语言。机器语言虽然能够被计算机理解和接受&#xff0c;但和人们的语言差别太大&#xff0c;不易被人们理解和记忆&a…

【SA8295P 源码分析 (四)】137 - 车载以太网协议学习总结(待更新......)

【SA8295P 源码分析】137 - 车载以太网协议学习总结 一、Ethernet 以太网介绍1.1 实效性:AVB(Audio Video Bridging)/ TSN(Time-Sensitive Networking)1.1.1 Synchronization:同步,协议(802.1AS)1.1.2 Latency:低延迟,协议(802.1Qav、802.1Qbu、802.1Qbv、802.1ch、…

Go语言中的接口设计艺术:发现面向对象编程的无限可能

一、GoLang 中的接口 1、GoLang 中的接口 在 Go 语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型接口&#xff08;interface&#xff09;定义了一个对象的行为规范&#xff0c;只定义规范不实现&#xff0c;由具体的对象来实现规范的细节实…

德迅抗D盾是如何防护攻击的

德迅抗D盾是针对游戏行业面对的DDoS、CC攻击推出的针对性的网络安全解决方案&#xff0c;相比高防IP&#xff0c;除了能针对大型DDoS攻击&#xff08;T级别&#xff09;进行有效防御外&#xff0c;还具备彻底解决游戏行业特有的TCP协议的CC攻击问题能力&#xff0c;防护成本更低…

基于Java SSM框架实现超市管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现超市管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

哈希查找(数据结构实训)

题目&#xff1a; 哈希查找 标准输入输出 题目描述&#xff1a; 实现哈希查找。要求根据给定的哈希函数进行存储&#xff0c;并查找相应元素的存储位置。本题目使用的哈希函数为除留取余法&#xff0c;即H(key)key%m&#xff0c;其中m为存储空间&#xff0c;冲突处理方法采用开…

Android的文件切割和合并,补全wav文件头

示例&#xff1a; 1、普通文件的拆分与合并&#xff1a; private void testFile() {File mWavFile new File(getExternalFilesDir(null).getAbsolutePath() "/test.wav");if (!mWavFile.exists()){Log.d("caowj", "文件不存在&#xff1a;" …

多人聊天作业

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…