有boost::asio::buffer
创建只包含一个元素的缓冲区序列。是否有任何包装器允许从多个缓冲区创建缓冲区序列?
答案 0 :(得分:13)
没有包装器,但您可以在符合MutableBufferSequence和ConstBufferSequence概念要求的任何容器中提供多个缓冲区,例如std::vector
,std::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可以根据需要创建副本。但是,在调用处理程序之前,底层内存buffers
和outbound_header_
必须保持有效。