热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跟我学c++中级篇——STL中的conditional原创

原标题:跟我学c++中级篇——STL中的conditional 原创一、std::conditional的定义 这是一个在c++11中提供的一个模板结构体,其定义

原标题:跟我学c++中级篇——STL中的conditional
原创


一、std::conditional的定义

这是一个在c++11中提供的一个模板结构体,其定义如下:

// 定义
templatewww.yii666.comclass T, class F >
struct conditional; (C++11 起)
提供成员 typedef type ,若 B 在编译时为 true 则定义为 T ,或若 B 为 false 则定义为 F 。
添加 conditional 的特化的程序行为未定义。
//说明
成员类型
-----------------------------------------------------------------------------------------
成员类型 定义
-----------------------------------------------------------------------------------------
type 若 B == true 则为 T ,若 B == false 则为 F
辅助类型
----------------------------------------------------------------------------------------
template
using conditional_t = typename conditional::type; (C++14 起)

conditional,本身就是“有条件”的意思,写过Linux条件变量的应该一眼就看得出来。在文档中可以看到它是通过模板第一个参数的值来决定使用其它模板参数。


二、用法

std::conditional的用法还是比较简单的,但是其中有一些小技巧可以达到一些特殊的目的:
1、通过表达式来确定定义的数据类型
这种是标准的文档中的用法,通过第一参数的控制值来决定哪种数据定义被体现出来。
2、可以动态匹配继承
其实这种和第一种没有本质区别,都是通过参数值来定义新类型,但这种有一个好处,可以部分解决多重继承的问题。

其实std::conditional的出现,可以实现一些动态数据类型的转换,比如在开发时使用一个测试数据类,而上线用另外一个。以前可以用宏定义来实现,而现在又多了这个手段,而且无这种方式更容易理解,更安全,更重要的是,它可以调试。其实这些都是在文章来源地址9067.html为元编程提供基础构架。


三、例程

先看一个官方文档提供的例程:

#include
#include
#include
int main()
{
typedef std::conditional::type Type1;
type文章来源站点https://www.yii666.com/def std::conditional::type Type2;
typedef std::conditional= sizeof(double), int, double>::type Type3;
std::cout < std::cout <www.yii666.com\n';
std::cout <}

再看一个稍微复杂一些的例子:

constexpr int sign = 10;
void TestCond()
{
std::conditional<
(sign > 100), double,
std::conditional<(sign > 80), float, std::conditional<(sign > 40), int, char >::type> ::type
>::type var;
cout <<"cur type is:" <}
int main()
{
TestCond();
return 0;
}

再看一个继承的例子:

const bool isOK = false;
class MyTest : public std::conditional::type
{
public:
MyTest() { std::cout <<"call MyTest!" <};
int main()
{
MyTest mt;
return 0;
}

它的运行结果:

call B
call MyTest!

看了上面的应用,基本对它的用法都会了吧。注意文章来源地址9067.html,定义中说明了,特化的行为结果未定义。


四、总结

学习STL是一个持久战,不用想着非要用多长时间把它搞定,这就是零敲牛皮糖的过程,在实践中遇到想着用某种方法解决,然后就会用了,也会用得好,要相信自己。正如前面反复说,把一些基础的东西贯通,再来回头看c++编程,就会体会到一种豁然开朗的感觉。c++需要不断的积累,这也是把新学者劝走的一个重要原因,如果你想学c++,就得坚持下去。

来源于:跟我学c++中级篇——STL中的conditional
原创


推荐阅读
  • 直击热门考点——结构体内存对齐
    原标题:直击热门考点——结构体内存对齐文章目录前言一、引例 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了一种图的存储和遍历方法——链式前向星法,该方法在存储带边权的图时时间效率比vector略高且节省空间。然而,链式前向星法存图的最大问题是对一个点的出边进行排序去重不容易,但在平行边无所谓的情况下选择这个方法是非常明智的。文章还提及了图中搜索树的父子关系一般不是很重要,同时给出了相应的代码示例。 ... [详细]
  • Parity game(poj1733)题解及思路分析
    本文是对题目"Parity game(poj1733)"的解题思路进行分析。题目要求判断每次给出的区间内1的个数是否和之前的询问相冲突,如果冲突则结束。本文首先介绍了离线算法的思路,然后详细解释了带权并查集的基本操作。同时,本文还对异或运算进行了学习,并给出了具体的操作步骤。最后,本文给出了完整的代码实现,并进行了测试。 ... [详细]
  • 原标题:Python中numpy.power()函数介绍Python中numpy.power()函数介绍power(x,y)函数, ... [详细]
  • 智商狂飙,问了ChatGPT几个数据库问题后,我的眼镜掉了
    原标题:智商狂飙,问了ChatGPT几个数据库问题后,我的眼镜掉了最近,ChatGPT火爆全网,介绍其产品、公司、作者、技术和应用等方面信息,占据着整个互联网,似乎不谈GPT好像 ... [详细]
  • 20210921c++ 继承,虚继承(内存结构)
    原标题:2021-09-21c++继承,虚继承(内存结构)普通的公有继承 ... [详细]
author-avatar
mobiledu2502882517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有