3

ビデオ フレームのセットのメモリ再利用のために、boost の object_pool クラスを使用したいと考えています。

boost::object_pool< VideoFrame > FramePool;

現在、VideoFrame クラスには 2 つのコンストラクターがあります。コンストラクターの最初のバージョンは 4 つの引数を受け取り、2 番目のバージョンは 6 つの引数/パラメーターを受け取ります。

割り当てられた「新しい」ビデオ フレームごとに、4 つまたは 6 つのパラメーター バージョンを使用して、オブジェクトのコンストラクターを呼び出したいと思います。例えば:

//VideoFrame *F = new VideoFrame(IdeckLinkOutput, &R, PixelFormat, FrameFlags);
VideoFrame *F = FramePool.construct(IdeckLinkOutput, &R, PixelFormat, FrameFlags);

これを MSVS 2005 でビルドすると、次のエラーが表示されます。

error C2660: 'boost::object_pool<T>::construct' : function does not take 4 arguments

object_pool の 'construct' メソッドに関するドキュメントによると、「ElementType には ??? に一致するコンストラクターが必要です。指定されたパラメーターの数は、pool_construct でサポートされている数を超えてはなりません」

boost のpool_constructのページを見たことがありますが、どの方向に進むべきかよくわかりません。私のマシンにあるブーストのビルドには、pool_construct.m4、pool_construct.sh、pool_construct.bat、pool_construct.inc の両方があります。自分のプロジェクト内でこれらのサンプル ファイルをどうするかという問題です。pool_construct.inc の独自のバリエーションを作成し、それを自分のプロジェクトに含めますか? ファイルを追加するにはどうすればよいですか?

ヒント/推奨事項は大歓迎です。gnu の m4 をインストールしたことに注意してください。

ゼロ欠陥。

4

1 に答える 1

3

/usr/include/boost/pool/detail/pool_construct.incDebian マシン (現在 MSVC にアクセスできなくて申し訳ありません) を見ると、最大 3 つのコンストラクター引数しかサポートしていないことがわかります。

ドキュメントに従って m4 をいじって、サポートされている 3 つ以上をサポートすることは、単一の構造体に十分な数の引数をバンドルする新しいコンストラクターを作成したり、boost::tuple渡された合計をサポートされている数にしたりするのと比較して、苦痛のように聞こえます。

于 2010-04-09T20:55:34.553 に答える