以下代码编译对我来说很好,但考虑到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 ()
答案 0 :(得分:1)
我认为这确实不正确,因为streambuf可能有几个不连续的区域。
所以你需要复制。或者,只需读入固定缓冲区即可。当然,这需要您提前知道最大尺寸,或者分几步读取。
顺便说一句,通过
const&
,您可能会创建一个引用临时的string_ref
。总是试着明确生活期望。