Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ asio::streambuf是否支持定位(即多个输入流)?_C++_Boost Asio - Fatal编程技术网

C++ asio::streambuf是否支持定位(即多个输入流)?

C++ asio::streambuf是否支持定位(即多个输入流)?,c++,boost-asio,C++,Boost Asio,在我的项目中,我使用and(非boost)。谷物的序列化函数期望在流上运行(例如,std::ostream) 序列化不是问题,反序列化也不是问题——通常情况下。以下是我的反序列化函数的外观: template <typename ...Types> auto deserialize(asio::streambuf& buf, Types& ...data) -> std::enable_if_t<(sizeof...(Types) > 0)>

在我的项目中,我使用and(非boost)。谷物的序列化函数期望在流上运行(例如,
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...);
} 
模板
自动反序列化(asio::streambuf&buf,类型和…数据)->std::enable\u if\u t 0)>
{
std::istream is(&buf);
谷类:二元不饱和脂肪酸(is);
ar(数据…);
} 
除了
is
导致缓冲区中的数据一旦被读取就会被销毁之外,它工作得非常好


是否可以在不释放数据的情况下读取
buf
(这样我就可以再次反序列化整个缓冲区)?
streambuf::pubsekpos
std::istream::seekg
都无法重置位置。

为什么需要多次读取缓冲区?解析需要时间,可能是您可以复制刚刚解析的对象,或者更好地重用它们?基本上有多个处理程序称为(基于事件的系统)。一个处理程序可能开始部分反序列化缓冲区,然后决定不处理消息。在这种情况下,应该将缓冲区重置为开始,以便下一个处理程序可以使用它。为什么需要多次读取缓冲区?解析需要时间,可能是您可以复制刚刚解析的对象,或者更好地重用它们?基本上有多个处理程序称为(基于事件的系统)。一个处理程序可能开始部分反序列化缓冲区,然后决定不处理消息。在这种情况下,应该将缓冲区重置为开始,以便下一个处理程序可以使用它。