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

深入理解C++ std::enable_if_t的用法<一>做为函数返回值

std::enable_if_tC++14引入的别名模板,定义在<type_traits>中:

template<bool B, typename T = void> using enable_if_t = typename std::enable_if<B, T>::type;

它的作用就是:如果Btrue,则enable_if_t<B, T>等价于T(默认void);如果Bfalse,则它不是一个有效的类型。利用“替换失败不是错误”(SFINAE)原则,我们可以用它来有条件地启用或禁用模板的重载或特化。

常见用法

  1. 作为函数返回值类型(最推荐,清晰直观)

  2. 作为模板默认参数typename = std::enable_if_t<...>

  3. 作为函数参数(不太常用)

下面举个例子说明做为函数返回值类型的用法

#include <iostream> #include <type_traits> // 版本1:仅当 T 是整数类型时启用 (返回类型为 T) template <typename T> std::enable_if_t<std::is_integral_v<T>, T> // 条件为 true 时,返回类型是 T get_value(T val) { std::cout << "Integral version, value = "; return val; } // 版本2:仅当 T 不是整数类型时启用 (返回类型为 T) template <typename T> std::enable_if_t<!std::is_integral_v<T>, T> // 条件为 true 时,返回类型是 T get_value(T val) { std::cout << "Non-integral version, value = "; return val; } int main() { // 整数类型 -> 调用版本1 int x = 42; std::cout << get_value(x) << std::endl; // 输出: Integral version, value = 42 // 浮点类型 -> 调用版本2 double pi = 3.14; std::cout << get_value(pi) << std::endl; // 输出: Non-integral version, value = 3.14 // 指针类型 (非整数) -> 调用版本2 const char* str = "hello"; std::cout << get_value(str) << std::endl; // 输出: Non-integral version, value = hello return 0; }
http://www.cnnetsun.cn/news/4260193.html

相关文章:

  • 基于CNN的睡眠质量分析系统:从时间序列处理到健康应用实践
  • 同样是写文档,为什么别人图文清爽?
  • OpenRouter深度解析:一个API Key统一调用多模型的工程实践
  • 本地大模型部署显存估算:用计算器搞定GPU选型与KV Cache优化
  • 降ai率指令怎么写?AI降重后怎样做AIGC检测和论文查重?
  • GPT-Image 2 科研绘图的8个专业Prompt,轻松做出顶刊级配图!
  • 技能熵:破解LLM长时程推理评测失真的新指标
  • 远程协助是什么软件 远程协助app哪个好用
  • WOA-ELM回归预测模型:鲸鱼算法优化极限学习机的原理与Matlab实现
  • Jetson Nano上ROS服务通信实战:从概念到调试全解析
  • vue学习(白话功能版)
  • 国赛真题解析:利用数学特性与剪枝优化子数组和积相等问题
  • Python实战Bayes判别分析:从数学原理到LDA/QDA模型应用
  • 实测数据公开:ZED X系列深度精度与传输性能全面验证报告
  • MVMD多元变分模态分解与小波阈值联合去噪:原理、MATLAB实现与调优指南
  • 三相电源Delta与Wye输入兼容设计:以4080W电源为例
  • 训练-免费的开放词汇语义分割:原型引导文本校准方法解析与工程实践
  • 企业私有 RAG 避坑实录:从代码幻觉到受约束生成的全链路改造
  • 知网二代讨论章节AI疑似度偏高怎么改:助研君分段处理实测
  • 敏捷BI实战指南:从概念到落地,避开五大误区构建数据驱动文化
  • RTL-SDR V2 RTL2832U+FC0012/FC0013 SDR软件无线电接收机 收音机 RTL-SDR6 V2无线电接收器 RTL2832U SDR接收机 FM频谱分析 ADS-B
  • 火焰识别VOC数据集解析与YOLO模型训练部署实战
  • 工业级布匹缺陷数据集构建:从采集、标注到模型训练全流程详解
  • AI落地最大的坑不是模型,而是数据、评测与工程化
  • ComfyUI+SD1.5+LoRA:AI一键将房屋平面图转为3D渲染效果图
  • 【单片机毕业设计推荐】基于 STM32 或 51 单片机的燃气火焰安全监测报警系统设计与实现 基于 STM32 或 51 单片机的家居燃气火情智能防护系统设计(017607)
  • 超长二进制数模5计算:状态机算法与性能优化实战
  • 本地开源AI去水印系统:原理、部署与实战调优
  • 腾讯云助手-优化SCF与静态托管CICD流水线
  • 从代码到数据库运行时,深入理解 SAP HANA Cloud HDI 的容器化部署体系