2

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

4

1 回答 1

14

没有包装器,但您可以在任何满足MutableBufferSequenceConstBufferSequence概念要求的容器中提供多个缓冲区,例如std::vectorstd::listboost::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 回答