我有一个代表内存中缓冲区的类
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
之间的字符。此外,由于内存缓冲区可能很大,我想避免对此进行任何额外的复制(除了复制到字符串流中)。
最佳答案
写入流总是写入输出流。
如果你看到例如this std::stringstream
reference您会看到它继承自 std::iostream
,后者继承自 std::ostream
(以及 std::istream
)。
这意味着您只需像这样重载它:
class Buffer
{
public:
...
friend std::ostream& operator<<(std::ostream& os, Buffer const& buf)
{
// Code to write the buffer to the stream...
}
};
当然,这种重载意味着您可以使用 Buffer
类写入任何输出流。
重载函数究竟需要什么来写入数据取决于数据。它可以是任何通用二进制数据那么你应该使用 std::ostream::write
.否则你可以只使用例如std::string
作为中间体:
return os << std::string(m_buffer, m_size);
你当然需要确保缓冲区不为空,或者空指针。
关于c++ - 将内存缓冲区写入 std::stringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644450/