これはかなりグロスで、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());