有boost::asio::buffer
一个只有一个元素的缓冲区序列。是否有任何包装器允许从多个缓冲区创建缓冲区序列?
问问题
5796 次
1 回答
14
没有包装器,但您可以在任何满足MutableBufferSequence和ConstBufferSequence概念要求的容器中提供多个缓冲区,例如std::vector
、std::list
或boost::array
。大多数函数都是根据 BufferSequence 概念实现的,并boost::asio::buffer
提供了一种方便的方法来将单个缓冲区包装成满足要求的类型。本文档简要提及它。
这是 Boost.Asio 序列化示例的片段:
// 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 可以根据需要创建副本。但是,底层内存outbound_header_
和outbound_data_
需要在调用处理程序之前保持有效。
于 2013-01-19T13:47:21.100 回答