显然boost::asio::async_read
不喜欢字符串,因为它是唯一的重载boost::asio::buffer
让我能够创造const_buffer
s,所以我不得不将所有内容读入流缓冲区。
现在我想将streambuf的内容复制到一个字符串中,但它显然只支持写入char*(sgetn()
),使用streambuf创建一个istream并使用getline()
.
有没有其他方法可以使用streambufs内容创建字符串而无需过多复制?
不知道算不算“过度复制",但您可以使用字符串流:
std::ostringstream ss;
ss << someStreamBuf;
std::string s = ss.str();
就像,要将所有内容从 stdin 读取到字符串中,请执行以下操作
std::ostringstream ss;
ss << std::cin.rdbuf();
std::string s = ss.str();
或者,您也可以使用istreambuf_iterator
。你必须衡量这个或上面的方法是否更快 - 我不知道。
std::string s((istreambuf_iterator<char>(someStreamBuf)),
istreambuf_iterator<char>());
注意someStreamBuf
上面的意思是代表一个streambuf*
,因此请酌情取其地址。另请注意上一个示例中第一个参数周围的附加括号,这样它就不会将其解释为返回字符串并采用迭代器和另一个函数指针的函数声明(“最令人烦恼的解析”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)