std :: stringstream有效获取写入数据的方法,复制到另一个流

edA*_*a-y 6 c++

没有编写自定义rdbuf有没有办法有效地使用字符串流?也就是说,满足这些要求:

  • 可以重置流并重新开始写入,而无需释放先前的内存
  • 获取一个const char*到写入的数据(以及长度),而不创建临时
  • 填充流而不创建临时字符串

如果有人可以给我一个明确的"不",这将是伟大的.

现在,我也使用了boost,所以如果有人可以提供一个提升替代方案来做到这一点会很棒.它必须同时具有istream和ostream接口.

Cha*_*via 6

使用boost::interprocess::vectorstreamboost::interprocess::bufferstream.这些课程基本满足您的所有要求.

boost::interprocess::vectorstream将不返回const char*,但它会返回const引用到内部容器类,(如一个内部向量),而不是返回一个临时字符串副本.在另一方面,boost::interprocess::bufferstream基本上允许你使用任意缓冲区作为I/O流,让您对内存分配完全控制,所以你可以很容易地使用char,如果你想缓冲.

这些都是伟大的阶级,和美妙的替代品std::stringstream,这在我看来,一直受到阻碍的事实,它不会给你内部缓冲区的直接访问,从而导致临时字符串对象的创建不必要的.遗憾的是,这些类有点模糊,隐藏在进程间库中.