我正在尝试编写一个允许我执行以下操作的宏:FORMAT(a << "b" << c << d)
,结果将是一个字符串 - 与创建ostringstream,插入a...d
和返回相同.str()
.就像是:
string f(){
ostringstream o;
o << a << "b" << c << d;
return o.str()
}
Run Code Online (Sandbox Code Playgroud)
基本上,FORMAT(a << "b" << c << d) == f()
.
首先,我试过:
1: #define FORMAT(items) \
((std::ostringstream&)(std::ostringstream() << items)).str()
Run Code Online (Sandbox Code Playgroud)
如果第一个项目是C字符串(const char *
),它将以十六进制格式打印字符串的地址,接下来的项目将打印正常.如果第一个项目是a std::string
,则将无法编译(没有匹配的运算符<<
).
这个:
2: #define FORMAT(items) \
((std::ostringstream&)(std::ostringstream() << 0 << '\b' << items)).str()
Run Code Online (Sandbox Code Playgroud)
带给你的似乎是一个正确的输出,但0
和\b
存在当然的字符串中.
以下似乎工作,但编译警告(采取临时地址):
3: #define FORMAT(items) …
Run Code Online (Sandbox Code Playgroud)