如何创建缓冲序列

时间:2013-01-19 10:23:53

标签: c++ boost-asio

boost::asio::buffer创建只包含一个元素的缓冲区序列。是否有任何包装器允许从多个缓冲区创建缓冲区序列?

1 个答案:

答案 0 :(得分:13)

没有包装器,但您可以在符合MutableBufferSequenceConstBufferSequence概念要求的任何容器中提供多个缓冲区,例如std::vectorstd::list或{ {1}}。大多数函数都是根据BufferSequence概念实现的,boost::asio::buffer提供了一种将单个缓冲区包装成满足要求的类型的通用方法。这篇documentation简要提到了它。

以下是Boost.Asio序列化example的代码段:

boost::array

请注意,// Write the serialized data to the socket. We use "gather-write" to send // both the header and the data in a single write operation. std::vector<boost::asio::const_buffer> buffers; buffers.push_back(boost::asio::buffer(outbound_header_)); buffers.push_back(boost::asio::buffer(outbound_data_)); boost::asio::async_write(socket_, buffers, handler); 集合不需要保留在范围内,因为documentation表示Boost.Asio可以根据需要创建副本。但是,在调用处理程序之前,底层内存buffersoutbound_header_必须保持有效。