이것은 매우 총체적이며 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()
값에서 문자열을 만들어야합니다. 이런 식으로하지 마십시오. Reed의 조언을 따르십시오. 여기
내가 그것을 꽤 인쇄 할 수 있도록 당신의 struct
을 수정하는 것이 방법입니다 : s
을 인쇄,
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"};
을 지금, 당신은 std::cout
를 사용할 수 있습니다,
std::cout << s << std::endl;
을 또는 경우 정말로 문자열이 필요합니다.
std::stringstream ss;
s.dump(ss);
puts(ss.str().c_str());
출처
2012-06-16 01:16:20
jxh
stringify? 매크로? 단순히 객체에 toString 메소드를 추가하지 않거나 이것을 달성하기 위해 const 참조를 취하는 free 함수를 추가하지 않는 것이 어떻습니까? 성능에 문제가 없다면'std :: ostringstream'을 사용할 수도 있습니다. – AJG85
거기에 매크로가 필요한 특별한 이유가 있습니까? Str 클래스에 대해'operator <<'를 쓰는 것이 낫다. –