【模板进阶】std::conditional

news2024/11/19 4:33:28

一、 s t d : : c o n d i t i o n a l std::conditional std::conditional的使用

C + + 11 C++11 C++11标准引入了 s t d : : c o n d i t i o n a l std::conditional std::conditional,这是一个类模板,用于表现一种编译期间的分支逻辑。


它的实现代码比较简单,如下所示:

//std::conditional用于表现一种编译期的分支逻辑

//代码实现

//泛化版本
template<bool b,class T,class U>
struct conditional {
	using type = T;
};

//特化版本
template<class T,class U>
struct conditional<false,T,U> {
	using type = U;
};

可以发现,在它的模板中,如果第一个参数为 f a l s e false false,那么我们将会调用它的特化版本,其内部的 t y p e type type将被替换为第二个 U U U类型。反之,将调用它的泛化版本, t y p e type type也将会被替换为第一个 T T T类型。


下面是 s t d : : c o n d i t i o n a l std::conditional std::conditional的一个简单使用

//std::conditional的简单使用
void Test1() {
	std::conditional<true, int, double>::type a1; //true,使用泛化类型,type = int
	std::conditional<false, int, double>::type a2;//false,使用特化类型,type = double

	std::cout << "a1的类型为:" << typeid(a1).name() << "\n";
	std::cout << "a2的类型为:" << typeid(a2).name() << "\n";
	
}

可以发现, a 1 a1 a1的类型是 i n t int int,而 a 2 a2 a2的类型为 d o u b l e double double

在这里插入图片描述


二、使用 s t d : : c o n d i t i o n a l std::conditional std::conditional实现编译期间的条件分支

我们可以使用 s t d : : c o n d i t i o n a l std::conditional std::conditional的嵌套来实现多重分支。考虑以下代码:

	constexpr int j = 30;
	std::conditional<(j > 100), double,// (j>100) -> double
		std::conditional<(j > 50), float,// (j>50)-> float
		std::conditional<(j > 20), int, //(j>20) -> int
		std::conditional<(j > 0), char, long long> //(j>0) -> char ,(j<=0) ->long long
		::type>::type>::type>::type j_type;

	std::cout << "j的类型为:" << typeid(j_type).name() << "\n";


这里实现了不同大小的 j j j,得到不同的类型。观察发现,这里的类型显然是 i n t int int

运行后:

在这里插入图片描述


同样的, s t d : : c o n d i t i o n a l t std::conditional_t std::conditionalt是标准库中 s t d : : c o n d i t i o n a l std::conditional std::conditional的别名模板,我们可以通过以下代码来简写:

//也可以使用别名模板std::conditional_t来简写

const int k = 80;
std::conditional_t<(k > 100), double,// (j>100) -> double
	std::conditional_t<(k > 50), float,// (j>50)-> float
	std::conditional_t<(k > 20), int, //(j>20) -> int
	std::conditional_t<(k > 0), char, long long>>>>k_type; //(j>0) -> char ,(j<=0) ->long long j_type;

std::cout << "k的类型为:" << typeid(k_type).name() << "\n";

其中 k k k的类型为 f l o a t float float

在这里插入图片描述

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

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

相关文章

【斯坦福CS144】Lab4

一、实验目的 完成一个网络接口实现。 二、实验内容 完成一个网络接口实现&#xff0c;其大部分工作是&#xff1a;为每个下一跳IP地址查找(和缓存)以太网地址。而这种协议被称为地址解析协议ARP。 三、实验过程 在minnow目录下输入git merge origin/check4-startercode获…

[ C++ ] C++ 类和对象 -- 类的六个默认成员函数

目录 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值操作符重载 5.两个取地址操作符的重载 在C中当你创建一个空类&#xff0c;那这个空类是什么都没有吗&#xff1f;不是的&#xff0c;编译器会默认帮你生成六个成员函数 1.构造函数 构造函数是特殊的成员函数&#xff0c;…

使用数据库:

数据库&#xff1a; 1.为何需要数据库&#xff1f; 存储数据方法 第一种&#xff1a;用大脑记住数据&#xff0c; 第二种&#xff1a;写纸上&#xff0c; 第三种&#xff1a;写在计算机的内存中&#xff0c; 第四种&#xff1a;写出磁盘文件 2.数据库能做什么&#xff1…

【探索艺术新纪元:Midjourney中文版,让创意无界!】

&#x1f3a8; 艺术&#xff0c;从此触手可及 在这个数字时代&#xff0c;Midjourney中文版正引领一场艺术创作的革命。作为一款前沿的AI绘画工具&#xff0c;它利用深度学习技术&#xff0c;将你的想象转化为触手可及的艺术作品。无需深厚的绘画功底&#xff0c;只需简单的文…

机器学习:opencv--图像拼接

目录 前言 一、两个函数 1.显示图像 2.计算图片特征与描述符 二、代码实例 1.准备图像 2.特征检测 3.特征匹配 4.图像变换 5.图像融合 前言 图像拼接是一种将多张图像合成一幅大图的技术&#xff0c;常用于全景图生成、图像拼接和图像合成等应用场景。 一、两个函数…

第二十三天|回溯算法| 39. 组合总和,40. 组合总和II,131. 分割回文串

目录 39. 组合总和 未剪枝 剪枝优化 40. 组合总和II 131. 分割回文串 回溯 回溯动态规划优化回文串判断 今天的题目自己都没啥思路&#xff0c;二刷的时候再理解一下。尤其是131. 39. 组合总和 本题和77.组合 &#xff0c;216.组合总和III的区别是&#xff1a;本题没有…

IDEA 输入英文字体变了的问题

**问题&#xff1a;**有时不知道按了什么快捷键导致在 IDEA 输入英文字体变了&#xff0c;如下所示&#xff0c;看起来特别不顺眼&#xff1a; 出现以上问题是因为在输入时切换了中文输入法&#xff0c;并且在提示文字时按了 Shift 空格 键&#xff0c;导致出现以上字体变化情…

H、Happy Number(2024牛客国庆集训派对day7)

题目链接&#xff1a; H-Happy Number_2024牛客国庆集训派对day7 (nowcoder.com) 题目描述&#xff1a; 翻译为中文&#xff1a; 数据范围&#xff1a; 输入样例&#xff1a; 680 输出样例&#xff1a; 326623 分析: 本来以为是dfs&#xff0c;但是看到数据范围1e9, 联想到是…

uniapp自定义导航,全端兼容

我们在用uniapp 开发应用的时候&#xff0c;有的页面需要自定义导航&#xff0c; 1.如果普通的直接使用uni 扩展柜组件的 uni-nav-bar 也基本够用&#xff0c; 2.如果稍微带点自定义的这个值无法支持的&#xff0c;特别在小程序端&#xff0c;胶囊是会压住右边的按钮的 自定…

多模态简单了解

多模态 1.文本编码2. ViT图像编码器2.1图像矩阵self-attention计算&#xff1a; 3.Transformer多模态3.1CLIP 图文交互3.2 对比学习训练3.3 flamingo 图文交互3.4 LLava 图文交互 1.文本编码 简介&#xff1a; 即通过embedding将字符向量化&#xff0c;进入模型即可。 2. ViT…

水下图像增强(论文复现)

本文所涉及所有资源均在 传知代码平台 可获取。 目录 概述 一、论文思路 二、模型介绍&#xff1a; 三、实现方法 四、复现过程(重要) 部署方式 概述 2021年11月&#xff0c;提出一种用于水下图像增强的U型Transformer模型&#xff0c;这是首次在水下图像增强任务中使用Transfo…

InnoDB 磁盘结构 - RedoLog

文章目录 RedoLog是什么刷盘机制崩溃恢复相关参数Redo Log 和 Undo Log 对比 https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html RedoLog是什么 RedoLog 是MySQL的一种日志文件&#xff0c;用于在崩溃恢复期间纠正由不完整事务写入的数据。在正常操作过程中&…

AtCoder Beginner Contest 374

C - Separated Lunch 题目&#xff1a; 思路&#xff1a; dfs枚举每个数是否选入a数组中&#xff0c;求和比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;typedef long long LL;const int N25;int a[N]; bool st[N]; int mn0x3f3f3f3f; int sum; …

VMWare安装ubuntu22虚拟机

1.下载VMware虚拟机和ubuntu 下载地址&#xff1a; VMware Workstation Pro - Download (softonic.com) Download Ubuntu Desktop | Ubuntu 2.Ubuntu的安装 1.VMware创建虚拟机。 2.选择默认即可点击下一步。 3.找到刚才下载的ubuntu20.04。选择下面的稍后安装操作系统。 …

众智OA办公系统 Account/Login SQL注入漏洞复现

0x01 产品简介 众智OA办公系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台。它凭借先进的技术和人性化的设计理念,实现了信息的快速传递和自动化处理,帮助企业和机构实现信息化、自动化、智能化和标准化的办公管理。 0x02 漏洞概述 众智OA办公系统 Acc…

【命令操作】linux上watch命令详解 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】linux上basename和dirname使用详解 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于Linux上watch命令的详解文章。watch命令是Linux系统中非常有用的一个工具&#xff0c;它可以定期执行指定的命令并在终端…

解决vscode cpptools-srv.exe占用内存过大,导致系统卡死问题

cpptools-srv.exe是安装了c扩展出来的进程。最新版本c扩展cpptools-srv.exe疯狂的占用内存&#xff0c;笔者机器64G内存 都被占满了&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 网上也试了一些其他的办法&#xff0c;设置里面限制内存不过不好…

一入递归深似海,算法之美无止境

最近在刷leetcode hot100,在写二叉树中最大路径和的时候,看到了一个佬对递归的理解,深受启发,感觉自己对于递归的题又行了!!! 这里给大家分享一下(建立大家先去尝试一下这道题再来看 124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每…

【优选算法】--- 位运算

位运算 一、常见的位运算总结&#xff08;重点&#xff01;&#xff09;1、关于位运算的符号2、&#xff08;判断&#xff09;给一个数字n&#xff0c;确定它的二进制表示中的第X位&#xff0c;是1还是0&#xff1f;3、&#xff08;修改&#xff09;如何把一个二进制的数字的第…

算法:双指针系列(一)

双指针系列 一、移动零&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示二、复写零&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示三、快乐数&#xff08;一&#xff09;题目分析&#xff08;二&#xff09;代码展示&#xff08…