【发布时间】:2019-02-12 10:17:44
【问题描述】:
我有这个代码:
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 解决方案。
【问题讨论】:
-
你不能。您需要以您的格式或通过一些其他变量传递该信息。
-
@JoeyMallone 我可以修改格式功能,但是如何?
-
__VA_ARGS__是C++11引入的,所以在C++98中无法实现 -
@MichaelVeksler,我使用
C++03,我使用__VA_ARGS__。:)我正准备用__VA_OPTS__测试你的答案,因为我不知道,但你删除了它。 -
@MatthieuBrucher 你是对的,这就是我删除答案的原因。但是,由于
__VA_ARGS__可用于 OP 的 C++98 编译器(尽管是 C++11 功能),它也可能具有__VA__OPT__作为扩展的一部分