news 2026/10/22 21:49: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/10/21 22:21:53

超详细版PCB布局基础步骤分解教程

掌握PCB布局&#xff1a;从零开始的实战入门指南你有没有遇到过这样的情况&#xff1f;电路原理图明明画得一丝不苟&#xff0c;元件选型也经过反复推敲&#xff0c;可做出来的板子就是不稳定——ADC采样跳动、Wi-Fi频繁断连、系统莫名其妙重启。问题出在哪&#xff1f;往往不是…

作者头像 李华
网站建设 2026/10/22 3:01:40

提升Python开发效率的7款实用工具

Python社区生态非常强大&#xff0c;因此Python有不少好用的工具来简化工作流。这里整理了7款实用工具&#xff0c;既有解决环境痛点的集成方案&#xff0c;也有在特定领域表现极致的小而美库。 ServBay 开发环境的配置一直是新老手的噩梦&#xff0c;尤其是当项目依赖不同版本…

作者头像 李华
网站建设 2026/10/21 5:50:32

会议纪要自动生成:录音转文字+要点提炼

会议纪要自动生成&#xff1a;录音转文字 要点提炼 在企业日常运营中&#xff0c;一场两小时的会议结束后&#xff0c;往往需要专人花上近一个小时逐字整理发言内容&#xff0c;再从中提取关键结论和待办事项。更糟糕的是&#xff0c;如果记录者中途走神或对业务理解不足&…

作者头像 李华
网站建设 2026/10/21 20:21:18

广州黄埔区智能体定制:亲测案例分享与效果复盘

广州黄埔区智能体定制&#xff1a;亲测案例分享与效果复盘行业痛点分析当前智能体定制领域面临着诸多技术挑战。首先&#xff0c;多引擎适配问题显著&#xff0c;不同应用场景对智能体的要求各异&#xff0c;单一的算法难以满足所有需求。其次&#xff0c;数据处理能力不足也是…

作者头像 李华
网站建设 2026/10/22 3:00:12

电机控制器入门教程:从选型到接线完整指南

电机控制器实战入门&#xff1a;从选型到接线&#xff0c;一次搞懂不踩坑 你有没有遇到过这种情况&#xff1f; 精心设计的机器人项目&#xff0c;代码写得飞起&#xff0c;结果一通电——电机不动、驱动芯片冒烟、电源“啪”一声跳闸……最后排查半天&#xff0c;发现只是 …

作者头像 李华
网站建设 2026/10/22 20:29:39

日志级别设置:调试模式下查看详细运行信息

日志级别设置&#xff1a;调试模式下查看详细运行信息 在构建和维护像 Anything-LLM 这样的大语言模型应用时&#xff0c;我们常常会遇到一个令人头疼的问题&#xff1a;AI“好像没理解我”&#xff0c;或者“明明上传了文档却搜不到内容”。表面上看是模型能力问题&#xff0c…

作者头像 李华