4

我目前正在开发一个使用 ac 库的 c++ 应用程序,该应用程序需要从我这边实现回调,例如回调定义如下:

int onWrite(char *what, char *buffer, size_t size, off_t offset);

我有 std::set 需要格式化并写入缓冲区并处理大小和偏移量其中大小是缓冲区的大小和偏移量已经处理了多少字节

有没有一种 c++ 方式可以让我像流一样进入缓冲区?我想这样的事情:

SomeSTLStandardStream stream(buffer,size);
stream.ignore(offset);  // to drop the first n offset bytes
for(it=dataset.begin();it!=dataset.end() && stream.buffer_avail()>0;it++)
    stream << *it << "|"; // format csv like for example

我的核心问题是:是否有一种标准的 C++ 方法可以只抓取一段格式化/流式数据并写入给定的缓冲区?

如果没有生病必须实施我自己的

我还查看了stringstream,但它似乎并不完全符合我的需求,因为它使用自己的写缓冲区而不是我的,而且我也不知道已经向它写入了多少字节等等......

谢谢

4

1 回答 1

3

您可以使用以下方法分配内存并将其包装在字符串流中std::stringstream::pubsetbuf

 int main()
 {
    char buf[1024];

    std::stringstream stream;

    stream.rdbuf()->pubsetbuf(buf, sizeof(buf));

    stream<< "Hello " << "World " << std::endl;

    std::string str;
    std::getline(stream, str);
    std::cout << str << std::endl;

    //...
}

阅读和。std::stringstream_std::basic_streambufstd::basic_stringbuf

于 2013-05-03T13:52:54.590 回答