首页 > 解决方案 > asio::streambuf 是否支持定位(即多个输入流)?

问题描述

在我的项目中,我使用的是谷物asio(非增强)。谷物的序列化函数期望在流上运行(std::ostream例如)。

序列化不是问题,反序列化也不是问题 - 通常。这就是我的反序列化函数的样子:

template <typename ...Types>
auto deserialize(asio::streambuf& buf, Types& ...data) -> std::enable_if_t<(sizeof...(Types) > 0)>
{
    std::istream is(&buf);
    cereal::BinaryInputArchive ar(is);
    ar(data...);
} 

它工作得很好,除了is会导致缓冲区中的数据在被读取后被销毁。

是否可以在buf不释放数据的情况下读取(这样我可以再次反序列化整个缓冲区)?既不streambuf::pubseekpos也不std::istream::seekg工作来重置位置。

标签: c++boost-asio

解决方案


推荐阅读