У меня есть класс, который представляет собой буфер в памятиЗапись буфера памяти для STD :: stringstream
class Buffer
{
public:
Buffer(const char* buffer, size_t size)
:m_buffer(buffer), m_size(size)
{
}
const char* m_buffer;
size_t m_size;
};
мне нужно перегружать operator<<
в этом классе, так что она может быть записана в std::stringstream
как этот
char arr[] = "hello world";
Buffer buf(arr, 11);
std::stringstream ss;
ss << buf;
Как это сделать? Обратите внимание, что буфер памяти может содержать NULL
символов. Кроме того, поскольку буфер памяти может быть большим, я хочу избежать дополнительных копий этого (кроме копирования в строковый поток).
Не могли бы вы помочь мне с тем, что должно входить в эту функцию (код для записи буфера в поток)? Благодарю. – tcb
Я бы хотел избежать дополнительных копий буфера (в промежуточную строку std ::) – tcb
Внутри определения функции 'friend':' return os.write (buf.m_buffer, buf.m_size); 'Предостережение существует, потому что 'write' принимает подписанный параметр целочисленного размера (тип' std :: streamsize'), чей счетчик бит обычно соответствует или превышает 'size_t', поэтому, если вы хотите обеспечить поддержку очень больших буферов, вам нужно будет проверить максимальный' std :: streamsize', а если 'm_size' больше, разбейте операцию записи на несколько кусков. –