2
有boost::asio::buffer
仅创建一个元素的缓冲区序列。是否有任何包装允许从多个缓冲区创建缓冲区序列?如何创建缓冲区序列
有boost::asio::buffer
仅创建一个元素的缓冲区序列。是否有任何包装允许从多个缓冲区创建缓冲区序列?如何创建缓冲区序列
没有包装,但可以提供满足MutableBufferSequence和ConstBufferSequence概念要求任何容器多个缓冲区,如std::vector
,std::list
,或boost::array
。大多数功能都是按照BufferSequence概念来实现的,并且boost::asio::buffer
提供了一种将单个缓冲区包装成符合要求的类型的方法。这documentation简要提到它。
下面是从Boost.Asio的系列化example一个片段:
// 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);
注意,buffers
收集不需要保持在范围内,因为这可能Boost.Asio的创造必要的复制documentation状态。但是,底层内存outbound_header_
和outbound_data_
需要保持有效直到处理程序被调用。
谢谢,这很有帮助。 asio文档有点稀疏。 –