c++ - 宏变量参数
问题描述
我有这个代码:
std::string format(const char *fmt, ...);
#define DEBUG(HANDLER, LEVEL, ...) LOG##LEVEL(HANDLER, format(__VA_ARGS__))
它在我使用时有效:
DEBUG(handler, DEBUG, "var is %d\n", 15);
但是当我使用时它不起作用:
DEBUG(handler, DEBUG, "test");
如何检查是否只有一个参数或多个参数?
我只需要使用C++98解决方案。
解决方案
由于__VA__ARGS__
在您的其他 C++98 编译器上可用(尽管是C++11 功能),所以它也有可能__VA_OPT__
作为扩展:
您应该使用__VA_OPT__(something)
(这是 C++20 的一项功能)使逗号仅在至少有一个参数时出现:
#define DEBUG(HANDLER, LEVEL, ...) LOG##LEVEL(HANDLER __VA_OPT__( format(__VA_ARGS__)))
或适用于您的情况的类似内容。
推荐阅读
- nearprotocol - 如何使用 Nearlib.js 获取某个账户的余额
- python - 如何在 Seaborn LineChart 上设置 X-Tick 标签大小
- reactjs - 如何在没有 node_modules 的情况下导入我在本地制作的 React 组件?
- scala - 如何在intellij和scala中为spark创建Maven项目
- algorithm - 如何优化 O(n^2)
- node.js - 如何使用 kubernetes 集群配置超级账本节点 sdk?
- powershell - 如何使用 powershell 脚本添加带有超链接的自动更正条目
- oracle - Oracle - 从 BLOB 中提取图像
- python - 使用函数的返回类型指定类型提示
- typo3 - TYPO3 - 翻译已设置但既不处理也不显示