c++ - 将内存缓冲区写入 std::stringstream

标签 c++ 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之间的字符。此外,由于内存缓冲区可能很大,我想避免对此进行任何额外的复制(除了复制到字符串流中)。

最佳答案

写入流总是写入输出流。

如果你看到例如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/

相关文章:

c++ - 使用stringstream从c++中的字符串中提取整数时出现意外重复

c++ - 在 C++ 中检查迭代器指针

c++ - 在 NDK 的稳定 API 之外使用原生 Android 系统库

c++ - 友元函数看不到私有(private)成员变量

c++ - << s.str() 和 << s.rdbuf() 之间的区别

c++ - 想要使用 sstream 解析 int 的字符串输入

c++ - 拆分包含逗号分隔条目的字符串流

字符串流istringstream的C++问题

时间:2019-02-08 标签:c++coutuncastedmemory(void)

c++ - 当我在网格/面中实现索引时,为什么会返回 OpenGl 错误?