首页 > 其他分享 >conditional_t和enable_if_t的实现

conditional_t和enable_if_t的实现

时间:2023-10-05 20:12:45浏览次数:26  
标签:__ enable 实现 true conditional template type

  conditional_t和enable_if_t是元编程里面很相似却有有着一定区别的模板。形如conditional_t<_Cond, _If, _Else>是指如果_Cond表达式为true,则类型为_If,否则类型为_Else。而形如enable_if_t<_Cond, _Tp>是指如果_Cond表达式为true,则类型为_Tp,否则不定义类型。

 

conditional_t的标准实现

template<bool>
    struct __conditional
    {
      template<typename _Tp, typename>
	using type = _Tp;
    };

  template<>
    struct __conditional<false>
    {
      template<typename, typename _Up>
	using type = _Up;
    };

  // More efficient version of std::conditional_t for internal use (and C++11)
  template<bool _Cond, typename _If, typename _Else>
    using __conditional_t
      = typename __conditional<_Cond>::template type<_If, _Else>;

这里指出一点,最后一行::后面的template其实可以去掉,变成::type<_If, _Else>。

 

enable_if_t的实现

template<bool, typename _Tp = void>
    struct enable_if
    { };

  // Partial specialization for true.
  template<typename _Tp>
    struct enable_if<true, _Tp>
    { typedef _Tp type; };

  // __enable_if_t (std::enable_if_t for C++11)
  template<bool _Cond, typename _Tp = void>
    using __enable_if_t = typename enable_if<_Cond, _Tp>::type;

对true类型进行了特化,只有true的时候才定义类型,否则不定义任何类型。_Tp的默认缺省类型是void。

 

  关于enable_if_t的简单应用,在之前的C++系列里面也有提到过。

标签:__,enable,实现,true,conditional,template,type
From: https://www.cnblogs.com/ChebyshevTST/p/17743839.html

相关文章

  • 实现文档AI搜索,提高问题解决效率
    在当今的数字时代,以AI为动力的文档搜索变得越来越重要。随着在线提供信息的指数增长,传统的搜索方法通常效率低下且耗时。实施文档AI搜索可以显著提高搜索相关文档的效率和有效性。|在网站中实施文档AI搜索的好处很多首先,它通过提供无缝且直观的搜索过程来增强用户体验。借助文档AI......
  • 【Flutter】如何优美地实现一个悬浮NavigationBar
    【Flutter】如何优美地实现一个悬浮NavigationBar最近写代码的时候遇到了一个如下的需求:整体来说,底部的条是一个浮动的悬浮窗,有如下的三个按钮:点击左边的要进入“主页”点击中间的按钮要进行页面跳转,能够进入“创作页”点击右边的按钮切换到“个人中心”页使用Overlay来......
  • 火山引擎 ByteHouse:TB 级数据下,如何实现高效、稳定的数据导入
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近期,火山引擎开发者社区、火山引擎数智平台(VeDI)联合举办以《数智化转型背景下的火山引擎大数据技术揭秘》为主题的线下Meeup。活动主要从数据分析、数据治理、研发提效等角度,带领数据领域从业者......
  • 小目标3:如何实现多个客户端的连接
    小目标3:如何实现多个客户端的连接如果有不止一个客户端连接入的话,之前的代码是无法解决这个问题的原因:如果多个客户端尝试连接,后续连接将阻塞在accept函数上,等待服务器处理当前连接的循环结束才行。 accept_socket=accept(server_socket,NULL,NULL); printf("有客户......
  • 基于Java的考编论坛网站的设计与实现(亮点:在线发布帖子、内容评论回复、购买二手物品、
    (考编论坛网站)网上大部分的毕设套路如下:在b站发毕设项目的演示视频,让你免费领取,你领取完发现代码不全或者数据库少表,根本跑不起来!如果要调试则收费300:sweat_smile:真的是恶心至极有没有!某宝找人帮忙写,简单来说比第一种行为靠谱,但是很贵!说是可以免费修改其实修改基本排不上队,......
  • 使用ensp搭建路由拓扑,并使用isis协议实现网络互通实操
    转载请注明出处:1.通过拓扑搭建如下拓扑:               其中R7、R8为L1,R6为L1/2,R9为L2。2.配置isis实现网络互通R7配置如下:[Huawei]isis1[Huawei-isis-1]dith#isis1is-levellevel-1network-entity10.0000.0000.0001.00#r......
  • SpringMVC使用@Valid注解实现数据验证
    一、@Valid注解的作用@Valid注解是javax.validation包中的一个注解,它可以用来标注需要验证的数据对象。当一个带有@Valid注解的对象传递给SpringMVC的控制器方法时,SpringMVC会自动调用验证器来验证这个对象。二、数据验证的流程SpringMVC中的数据验证流程如下:......
  • 信息安全系统设计与实现课程第十一章学习笔记
    一、知识点归纳1.EXT2文件系统多年来,Linux一直使用EXT2(Card等1995)作为默认文件系统。EXT3(EXT3,2014)是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中°日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系......
  • 实现点赞功能-实现点赞数变更的消息监听器
        ......
  • 实现点赞功能-实现查询点赞状态接口
           ......