这很恶心,只适用于gcc
/ g++
。
#define STRINGIFY_STR(x) \
std::string(({ std::ostringstream ss; \
ss << "[a: " << x.a \
<< ", f: " << x.f \
<< ", c: " << x.c << "]"; \
ss.str(); })).c_str()
您必须从值创建字符串。请不要这样做。请听从里德的建议。
以下是我将如何修改您struct
以使其打印得很好:
struct Str
{
int a;
float f;
char *c;
std::ostream & dump (std::ostream &os) const {
return os << "[a: " << a
<< ", f: " << f
<< ", c: " << c << "]";
}
};
std::ostream & operator << (std::ostream &os, const Str &s) {
return s.dump(os);
}
Str s = {123, 456.789f, "AString"};
现在,要打印出来s
,您可以使用std::cout
:
std::cout << s << std::endl;
或者,如果你真的想要一个字符串:
std::stringstream ss;
s.dump(ss);
puts(ss.str().c_str());