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

一种宏模板实现方法

一种宏模板实现方法

#define CONDITION_FUNC(_FUNC_NAME_, _THRES_, _POLARITY_) \
bool _FUNC_NAME_(float val) \
{ \bool res = (val>_THRES_)?true:false; \if(_POLARITY_ == -1){ \res = !res; \} \return res; \
}CONDITION_FUNC(VOLUME_CONDITION, 1.2, 1);

几乎可以肯定不是好的实践
在这里插入图片描述
但确实有用

于是乎可以做一些分析:

这个宏定义和使用的写法有一些优点,但也存在一些潜在问题,是否"好"取决于具体的使用场景和代码标准。下面是我的分析:

优点:

  • 代码复用:通过宏实现了条件判断函数的模板化,避免了重复编写类似的函数
  • 可配置性:通过参数可以灵活调整阈值和极性
  • 简洁性:一行宏调用就能生成一个完整的函数

缺点和潜在问题:

  • 宏命名风格:全大写的宏名和参数名通常用于常量,这里用于函数生成可能不太合适 潜在命名冲突:生成的函数名是直接使用参数,可能导致命名冲突
  • 类型安全性:宏缺乏类型检查,可能导致难以发现的错误 调试困难:宏展开后的代码在调试时可能不易追踪
  • 可读性:对于不熟悉这种模式的开发者可能不够直观

改进建议:

考虑使用模板函数替代宏:

template<int POLARITY>
bool condition_func(float val, float thres) {
bool res = (val > thres);
if constexpr (POLARITY == -1) {res = !res;
}
return res;
}

如果坚持使用宏,可以:

  • 使用更合适的命名规范
  • 添加更多注释说明
  • 考虑添加参数检查
  • 或者使用函数工厂模式:
auto createCondition(float thres, int polarity) {return [thres, polarity](float val) {bool res = val > thres;return polarity == -1 ? !res : res;};
}

结论

在C++中,这种宏定义方式已经有些过时,现代C++更推荐使用模板、lambda或constexpr等方式实现类似功能。但在某些特定场景(如需要大量生成类似函数的嵌入式系统),这种写法仍有一定价值。是否"好"取决于项目的具体要求和团队的编码规范。

http://www.dtcms.com/a/295962.html

相关文章:

  • (实用攻略)Linux操作系统(一)
  • 强制缓存与协商缓存
  • CentOS7 安装 rust 1.82.0
  • C语言转义字符‘\\‘‘ 解析与常见误区
  • 收银系统合作模式全解析:SaaS、私有化部署与开源版选型指南
  • Kylin V10 4070安装nvidia驱动+CUDA+docker安装
  • 循环队列的两种实现
  • Spring AI 系列之二十四 - ModerationModel
  • 每日算法刷题Day52:7.24:leetcode 栈5道题,用时1h35min
  • 前端性能新纪元:Rust + WebAssembly 如何在浏览器中实现10倍性能提升(以视频处理为例)
  • uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错
  • [网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
  • SAP-MM-采购订单批量创建 excel 版
  • 保留5位小数封装一个自定义指令
  • Linux 内核基础统简全解:Kbuild、内存分配和地址映射
  • 10分钟搭建脚手架:Spring Boot 3.2 + Vue3 前后端分离模板
  • Springboot儿童医院问诊导诊系统aqy75(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 使用钉钉开源api发送钉钉工作消息
  • C语言 一文详解常用的字符串操作函数及模拟实现
  • 医疗系统国产化实录:SQL Server国产替代,乙方保命指南
  • DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B
  • 集合中Comparable接口和Equals方法的冲突
  • 【Mermaid 离线工具】Mermaid 流程图生成器 - 高清PNG输出,一键生成专业级流程图!
  • 共创养生新时代——2025酵素益生产品展暨中秋滋补选品节即将开启
  • QT6 源(165)模型视图架构里的所有的信号函数概览
  • UNETR++: Delving Into Efficient and Accurate 3D Medical Image Segmentation
  • 深度分析Java内存模型
  • 【全新上线】境内 Docker 镜像状态监控
  • 算法第三十八天:动态规划part06(第九章)
  • 【shell脚本编程】day1 备份指定文件类型