相关疑难解决方法(0)

C++格式宏/内联ostringstream

我正在尝试编写一个允许我执行以下操作的宏: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)

c++ printing format macros ostringstream

14
推荐指数
2
解决办法
7250
查看次数

标签 统计

c++ ×1

format ×1

macros ×1

ostringstream ×1

printing ×1