下面的代码对我来说编译得很好,但是考虑到ASIO缓冲区的设计有点复杂,我不确定它是否正确。这样做的目的是允许将streambuf的内容提供给HTTP解析器,而无需创建中间的std::string对象,其他std::string代码示例似乎就是这样做的。
boost::string_ref makeStringRef(const boost::asio::streambuf& streambuf)
{
auto&& bufferType = streambuf.data();
return {
boost::asio::buffer_cast<const char*>(bufferType),
boost::asio::buffer_size(bufferType)
};
}发布于 2017-04-11 08:33:19
我认为这是不正确的,因为流线可能有几个不相邻的区域。
所以你无论如何都要抄袭。或者,只需将其读入固定的缓冲区即可。当然,这要求您提前知道最大大小,或者分几个步骤阅读。
顺便说一句,通过使用
const&,您可能会创建一个引用临时string_ref的string_ref。对生命时间的期望值要尽量明确。
https://stackoverflow.com/questions/43333099
复制相似问题