7

我无法在这里正确地制作这条线:

boost::asio::async_write(serialPort, 
                         boost::asio::buffer(
                         boost::asio::buffer_cast<const void*>(vector_.front()),
                         boost::asio::buffer_size(vector_.front())))

vector_拥有多个boost::asio::const_buffers

std::vector<boost::asio::const_buffer> vector_;

这些东西有效,但我很确定有一种更优雅的方法可以做到这一点,如果没有,我想从有更多经验的人那里得到。

那么,这个解决方案可以改进吗?如果是这样,怎么做?

4

2 回答 2

5

我想你正在寻找这个:

boost::asio::async_write(serialPort, make_buffer(vector_.front()) );

其中make_buffer定义为:

template<typename TBuffer>
boost::asio::buffer make_buffer(TBuffer & data)
{
   auto buf = boost::asio::buffer_cast<const void*>(data);
   auto size= boost::asio::buffer_size(data);
   return boost::asio::buffer(buf, size);
}

顺便说一句,这是一个通用功能。

于 2012-12-20T15:05:51.723 回答
4

优雅的方法是将缓冲区直接传递给boost::asio::buffer. 它的一个重载采用 singleboost::asio::const_buffer并返回一个可以在 中使用的类型boost::asio::async_write,因为它符合 ConstBufferSequence概念的要求。

boost::asio::async_write(serialPort, boost::asio::buffer(vector_.front()));

作为一般规则,应用程序永远不需要使用boost::asio::buffer_cast.

于 2012-12-21T18:05:52.677 回答