当前位置: 首页 > news >正文

学习模板元编程(3)enable_if

目录

行为

实现代码

enable_if_t

注意事项


行为

enbale_if调用方式如下

std::enable_if<布尔型变量,类型>::type

假如第一个输入参数为真,则最终的type与enbale_if<>模板里第二个输入参数的类型相同;否则模板匹配失败。

实现代码

下面是enable_if代码的大致实现:

template<class T>
struct enable_if<bool, T>{}template<class T>
struct enable_if<true, T>
{using type = T;
}

可见,如果enable_if的第一个输入参数为假,则匹配第一个enable_if模板。此时enable_if不含有type,故任何enable_if::type的调用都是无效的,匹配失败;

只有当enable_if的第一个输入参数为真,enable_if才含有type类型,且此时type对应类型T。

enable_if_t

template<bool b, class T>
using enable_if_t = typename enable_if<b, T>::type;

enable_if_t是C++14引入的,其功能是简化enable_if<...>::type

注意事项

理论上,你可以做如下操作:

#include <iostream>template<class T>
typename std::enable_if<std::is_integral<T>::value, T>::type func(T t)
{return t + 10;
}template<class T>
typename std::enable_if<!std::is_integral<T>::value, T>::type func(T t)
{return t;
}int main(void)
{std::cout << func(50) << std::endl;std::cout << func(0.1) << std::endl;std::cin.get();return 0;
}

上述代码确实在编译时实现了类似运行时if-else的功能。但是根据scott meyes的《Effective C++ 11》,避免将enable_if用作函数签名:在返回值或者输入参数里使用enable_if来实现模板匹配是不被提倡的

http://www.lryc.cn/news/616232.html

相关文章:

  • 【树状数组】Dynamic Range Sum Queries
  • [激光原理与应用-221]:设计 - 皮秒紫外激光器 - 常见技术难题、原因与解决方案
  • Linux-静态配置ip地址
  • 【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制
  • 深度解析Linux设备树(DTS):设计原理、实现框架与实例分析
  • 基于Qt/QML 5.14和YOLOv8的工业异常检测Demo:冲压点智能识别
  • 线程池的核心线程数与最大线程数怎么设置
  • 基于FFmpeg的B站视频下载处理
  • 简要介绍交叉编译工具arm-none-eabi、arm-linux-gnueabi与arm-linux-gnueabihf
  • 【iOS】JSONModel源码学习
  • 2025.8.10总结
  • mpv core_thread pipeline
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2025年4月13日真题
  • ARM保留的标准中断处理程序入口和外设中断处理程序入口介绍
  • Python设计模式 - 装饰模式
  • 双亲委派机制是什么?
  • 亚麻云之轻云直上EC2
  • 硬件开发_基于STM32单片机的智能电梯系统
  • 关键基础设施中的新兴技术如何扩大网络风险
  • Java .class文件反编译成 .java文件
  • LeetCode 括号生成
  • 机器学习数学基础:46.Mann-Kendall 序贯检验(Sequential MK Test)
  • AtomicStampedReference解决方案
  • QT常用控件三
  • 浏览器CEFSharp88+X86+win7 之js交互开启(五)
  • 深入理解C语言一维数组的本质:数组名、指针常量与访问细节
  • 女子试穿4条裤子留下血渍赔50元引争议:消费责任边界在哪?
  • 无须炮解,打开即是Pro版
  • (LeetCode 每日一题) 869. 重新排序得到 2 的幂 (哈希表+枚举)
  • Python中随机化列表元素的详细方法