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です。そのオーバーロードの 1 つは、単一の値を取り、概念の要件を満たしているため、 で boost::asio::const_buffer使用できる型を返します。boost::asio::async_writeConstBufferSequence

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

原則として、アプリケーションで を使用する必要はありませんboost::asio::buffer_cast

于 2012-12-21T18:05:52.677 に答える