Я использую их в основном в качестве буферов памяти, при создании сообщений:
if(someVector.size() > MAX_SIZE)
{
ostringstream buffer;
buffer << "Vector should not have " << someVector.size() << " eleements";
throw std::runtime_error(buffer.str());
}
или для построения сложных строк:
std::string MyObject::GenerateDumpPath()
{
using namespace std;
std::ostringstream dumpPath;
// add the file name
dumpPath << "\\myobject."
<< setw(3) << setfill('0') << uniqueFileId
<< "." << boost::lexical_cast<std::string>(state)
<< "_" << ymd.year
<< "." << setw(2) << setfill('0') << ymd.month.as_number()
<< "." << ymd.day.as_number()
<< "_" << time.hours()
<< "." << time.minutes()
<< "." << time.seconds()
<< ".xml";
return dumpPath.str();
}
Это полезно, потому что оно обеспечивает всю расширяемость std::stream
s для использования символьных буферов (расширяемость ostream и поддержка локалей, управление буферной памятью скрыто и т. Д.).
Другим примером, который я видел, было сообщение об ошибке в библиотеке gsoap с использованием внедрения зависимости: soap_stream_fault принимает ostream & параметр для сообщения об ошибках в.
Если вы хотите, вы можете передать ему std :: cerr, std :: cout или реализацию std :: ostringstream (я использую это с реализацией std :: ostringstream).