我正在尝试为日志机制编写一个宏。我写了一个可变参数宏,但它不起作用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”
这里的问题不是可变参数宏,而是对printf
。看看文档 https://en.cppreference.com/w/cpp/io/c/fprintf: 格式说明符"%s"
对应于char*
, not std::string
. printf
只能处理原始内置类型。您可以将调用更改为
LOG_NOTE("%s %d %s", "Hello World", bar, foo.c_str());
解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)