首页 > 解决方案 > 宏变量参数

问题描述

我有这个代码:

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解决方案。

标签: c++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__)))

或适用于您的情况的类似内容。


推荐阅读