ostream &
매개 변수 o
을 사용하여 해당 ostream에 쓰는 함수가 있다고 가정합니다. operator <<
구현이 좋은 예입니다.다른 streambuf를 사용하여 임시 ostream을 생성해야합니까?
ostream& operator << (ostream& o, const MyThing& t)
{
// ... interesting code here ...
return o;
}
이 함수 내에서 스트림에 서식 옵션을 지정하고자 할 수 있습니다. 예를 들어, 함수에 전달 될 때 o
이 구성되는 방법에 관계없이 숫자를 16 진수로 인쇄하려고 할 수 있습니다.
둘째, 현재 서식 플래그에 대한 가정을 할 수 있기를 바랍니다. 예를 들어, 달리 요구하지 않는 한 숫자가 십진수로 포맷되었다고 가정 할 수 있으면 좋을 것입니다.
마지막으로 함수가 종료 될 때까지 o
의 서식 옵션을 호출하기 전에 있던 것과 동일하게하여 호출자에게 변경되지 않도록합니다. 이것은 단순히 발신자에게 공손한 문제입니다.
ostringstream
를 생성하고 (서식 설정 옵션을 포함)이 내 모든 일을하고, 함수의 끝에서
o
에
.str()
을 보내이를 달성했다.
StackOverflow 질문 here은 나보다 더 똑똑한 사람들이 동일한 접근 방식을 취한다고 제안합니다. 그러나 나는 문자열에 문자열 (문자열)이 꽤 빨리 나올 수 있으므로 이전에 출력으로 보낼 수있는 너무 많은 데이터를 유지한다고 걱정합니다.
1)가, 법률 관용적인가, 좋은 형태 등이 o.rdbuf()
주위 임시 (스택 기반) ostream에를 만들고 해당 ostream에 내 일을 할 수있는 :
나는이 개 질문이? 내 자신의 테스트와 페이지에서 cppreference.com 내가 할 수있는 것으로 나타납니다.
ostream& operator << (ostream& o_, const MyThing& t)
{
ostream o (o_.rdbuf());
// write stuff to "o",
// setting formatting options as I go.
return o_; // Formatting on the parameter ostream o_ unchanged.
}
2) 제가 고려하지 않은 다른 방법이 있습니까?
그 호출이 가장 생성자 및 소멸자에 배치 될 것 일부 스택 기반 객체. Boost 클래스가하는 일이라고 생각합니다. – peterpi