将boost streambuf转换为string_ref

时间:2017-04-10 21:23:19

标签: boost-asio

以下代码编译对我来说很好,但考虑到ASIO缓冲区的设计有些复杂,我不确定它是否正确。目的是允许将std::string的内容提供给HTTP解析器,而无需创建中间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) }; } 对象,这是其他ASIO代码示例似乎所做的。

if (NOT FFmpeg_FIND_COMPONENTS)
  set(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL)
endif ()

1 个答案:

答案 0 :(得分:1)

我认为这确实不正确,因为streambuf可能有几个不连续的区域。

所以你需要复制。或者,只需读入固定缓冲区即可。当然,这需要您提前知道最大尺寸,或者分几步读取。

  

顺便说一句,通过const&,您可能会创建一个引用临时的string_ref。总是试着明确生活期望。