news 2026/5/13 1:37:19

有意思的新特性:void_t

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
有意思的新特性:void_t

博主介绍:程序喵大人

  • 35 - 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😉C++基础系列专栏
    😃C语言基础系列专栏
    🤣C++大佬养成攻略专栏
    🤓C++训练营
    👉🏻个人网站

C++ void_t 特性详解与典型用法示例

最近发现了一个有意思的特性:void_t。void_t是C++17引入的一个新特性,它的定义很简单(有些编译器的实现可能不是这样,但也大体类似):

template<class...>usingvoid_t=void;

看着它很简单,但它搭配SFINAE却可以在模板元编程中发挥巨大作用。

比如在编译期判断类是否有某个类型using:

template<class,class=std::void_t<>>structhas_type:std::false_type{};template<classT>structhas_type<T,std::void_t<typenameT::type>>:std::true_type{};

比如判断是否有某个成员:

template<class,class=std::void_t<>>structhas_a_member:std::false_type{};template<classT>structhas_a_member<T,std::void_t<decltype(std::declval<T>().a)>>:std::true_type{};

比如判断某个类是否可迭代:

template<typename,typename=void>constexprboolis_iterable{};template<typenameT>constexprboolis_iterable<T,std::void_t<decltype(std::declval<T>().begin()),decltype(std::declval<T>().end())>>=true;

比如判断某个类是否有某个函数:

template<classT,class=void>structhas_hello_func:std::false_type{};template<classT>structhas_hello_func<T,std::void_t<decltype(std::declval<T>().hello())>>:std::true_type{};

测试结果:

structHasType{typedefinttype;};structNHasType{inthello;};structHasa{inta;};structNHasa{intb;};structHasHello{voidhello();};structNoHasHello{};intmain(){std::cout<<has_type<HasType>::value<<'\n';// 1std::cout<<has_type<NHasType>::value<<'\n';// 0std::cout<<has_a_member<Hasa>::value<<'\n';// 1std::cout<<has_a_member<NHasa>::value<<'\n';// 0std::cout<<has_hello_func<HasHello>::value<<'\n';// 1std::cout<<has_hello_func<NoHasHello>::value<<'\n';// 0std::cout<<is_iterable<std::vector<double>><<'\n';// 1std::cout<<is_iterable<double><<'\n';// 0}

它的原理其实就是利用SFINAE和模板优先找特化去匹配的特性,估计大家应该看示例代码就能明白。

码字不易,欢迎大家点赞,关注,评论,谢谢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 19:32:24

服务器的windows和Linux系统有什么区别

Windows Server与Linux系统在服务器场景的核心区别体现在权限架构、生态适配、运维成本三方面&#xff0c;以下是500字左右的详细分析&#xff1a;1. 权限与安全机制 Windows Server基于NTFS文件系统和用户账户控制&#xff08;UAC&#xff09;&#xff0c;采用域管理&#xff…

作者头像 李华
网站建设 2026/5/3 17:24:17

利用FPGA实现逻辑门多层感知机:项目应用详解

用最“硬核”的方式跑神经网络&#xff1a;在FPGA上从逻辑门搭建多层感知机你有没有想过&#xff0c;一个能做分类决策的神经网络&#xff0c;其实可以不用一行C代码、不调用任何库函数&#xff0c;甚至连乘法器都不需要&#xff1f;它完全由与门、或门、异或门这些基础数字电路…

作者头像 李华
网站建设 2026/5/11 8:29:49

职场妈妈不慌的秘密?全靠这台智能音箱

晚上八点&#xff0c;我刚在办公室敲完方案&#xff0c;手机便收到家里带屏智能音箱的视频邀请。接通后&#xff0c;女儿圆乎乎的小脸凑到屏幕前&#xff0c;眼睛亮晶晶地举着乐高城堡让我看&#xff0c;画面声音都真实得仿佛她就在旁边&#xff0c;这一声呼唤瞬间驱散了我加班…

作者头像 李华
网站建设 2026/5/3 14:16:42

面试问题模拟:求职者练习的理想工具

面试问题模拟&#xff1a;求职者练习的理想工具 在当今竞争激烈的就业市场中&#xff0c;一场高质量的面试往往决定了职业发展的起点。许多求职者投入大量时间背诵常见问题、参加模拟面试&#xff0c;但效果却常常不尽如人意——问题千篇一律&#xff0c;反馈流于表面&#xff…

作者头像 李华
网站建设 2026/5/2 4:58:36

灾难恢复演练计划:极端情况下重建服务能力

灾难恢复演练计划&#xff1a;极端情况下重建服务能力 在一场突如其来的数据中心断电事故中&#xff0c;某企业的AI知识助手突然离线。运维团队紧急响应&#xff0c;却发现文档索引丢失、权限配置错乱&#xff0c;甚至连模型连接参数都因配置文件损坏而无法还原——整整六小时…

作者头像 李华