如何正确使用boost async_write和boost const_buffers向量?

Joo*_*ook 7 c++ vector boost-asio

我无法在这里使这条线路正确:

boost::asio::async_write(serialPort, 
                         boost::asio::buffer(
                         boost::asio::buffer_cast<const void*>(vector_.front()),
                         boost::asio::buffer_size(vector_.front())))
Run Code Online (Sandbox Code Playgroud)

vector_ 拥有一些 boost::asio::const_buffers

std::vector<boost::asio::const_buffer> vector_;
Run Code Online (Sandbox Code Playgroud)

这个东西有效,但我很确定有一种更优雅的方式可以做到这一点,如果没有,我想在这里有更多经验的人.

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

Naw*_*waz 5

我想你正在寻找这个:

boost::asio::async_write(serialPort, make_buffer(vector_.front()) );
Run Code Online (Sandbox Code Playgroud)

其中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);
}
Run Code Online (Sandbox Code Playgroud)

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

  • @Jook:你知道`booost :: asio :: buffer_cast`也是**函数.事实上它是功能模板.所以不要认为它像`static_cast`. (3认同)
  • 哦,好吧,这会把它清理干净 - 再次感谢快速准确的帮助! (2认同)