如何创建缓冲序列

pic*_*c11 2 c++ boost-asio

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

Tan*_*ury 13

没有包装,但你可以在满足任何容器提供多个缓冲区MutableBufferSequenceConstBufferSequence概念要求,如std::vector,std::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);
Run Code Online (Sandbox Code Playgroud)

请注意,buffers集合不需要保留在范围内,因为文档声明Boost.Asio可以根据需要创建副本.但是,底层内存,outbound_header_并且outbound_data_需要在调用处理程序之前保持有效.