Я пишу подпрограмму, которая должна записывать данные в существующий буфер, и я хотел бы использовать класс stringstream
для облегчить форматирование данных.
Вначале я использовал следующий код для копирования содержимого потока в буфер, но хотел бы избежать этого решения, поскольку он копирует слишком много данных.
#include <sstream>
#include <algorithm>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message << "Hello" << std::endl;
message << "World!" << std::endl;
std::string messageText(message.str());
std::copy(messageText.begin(), messageText.end(), buffer);
}
Это когда я обнаружил метод streambuf::pubsetbuf()
и просто переписал вышеуказанный код следующим образом.
#include <sstream>
void FillBuffer(char* buffer, unsigned int size)
{
std::stringstream message;
message.rdbuf()->pubsetbuf(buffer, size);
message << "Hello" << std::endl;
message << "World!" << std::endl;
}
К сожалению, это не работает при реализации стандартной библиотеки С++, которая поставляется с Visual Studio 2008; buffer
остается неизменным.
Я посмотрел на реализацию pubsetbuf
, и получается, что он буквально "ничего не делает".
virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
{ // offer buffer to external agent (do nothing)
return (this);
}
Это, по-видимому, является ограничением данной реализации стандартной библиотеки С++. Каков рекомендуемый способ настройки потока для записи его содержимого в заданный буфер?