【发布时间】:2018-08-15 09:44:49
【问题描述】:
我正在尝试为日志记录机制编写一个宏。我写了一个可变参数宏,但它不适用于std::string。代码如下所示:
#include <stdio.h>
#include <string>
#define LOG_NOTE(m, ...) printf(m, ##__VA_ARGS__)
int main()
{
std::string foo = "random string";
int bar = 5;
LOG_NOTE("%s %d %s", "Hello World", bar, foo);
return 0;
}
如果我像下面这样调用宏,我不会收到任何错误。
LOG_NOTE("%s %d %s", "Hello World", bar, "random string");
编译器输出:
在函数“int main()”中:5:49:错误:无法传递对象 非平凡可复制类型 'std::string {aka 类 std::basic_string}' 到 '...' 11:5: 注意:在扩展 宏“LOG_NOTE”
【问题讨论】:
-
顺便说一句,如果你使用 gcc 它的
-E标志在预处理器之后获取输出,在编写宏时有很大帮助。 -
您需要格式,还是只是空格分隔的值?
-
我实际上只需要空格分隔的值,目前我正在尝试根据答案实现它,但出现链接器错误
标签: c++ macros variadic-macros