0

std::bitset<>インスタンス化時に動的にサイズ変更できる便利なアナログはありますが、boost::dynamic_bitset<>

次のような操作を行うことで、Cで動的なサイズのビットセットを簡単に作成できます。

typedef struct { node_t node; block_t bits[0]; } node_bitset_t;
p = (node_bitset_t *)malloc( (sizeof(node_t) + sizeof(block_t)*blocks) * array_size);

コンパイル時std::vector<std::bitset<bits>>に知っている場合にのみ、これを使用できます。bitsを使用するstd::vector<boost::dynamic_bitset<>>と、追加のアロケータ呼び出しが表示されます。上記のCコードのバランスを実現する妥協点はありますか?

たとえば、std :: vector <...>用のカスタムアロケータがあり、それぞれの後に余分なスペースを残してそこにboost::dynamic_bitset<>割り当てm_blockますが、それでもおそらくのポインタが必要になりますm_block

4

2 に答える 2

3

new配置を使用してそのようなクラスを作成することは可能ですが、これを行う既存のクラスを私は知りません。クラスは直接インスタンス化されませんが、ファクトリを介して構築されます。ファクトリメソッドはnew必要なバイト数を割り当てるために使用し、次に配置newを使用してバッファの先頭にあるオブジェクトを初期化します。クラスのサイズを超えたバッファの終わりは、ビットストレージになります。

実際には、これを行う必要はありません。これは、に対して何も保存しないためdynamic_bitsetです。このメソッドでは、ビットオブジェクトへのポインタとオブジェクト自体の2つの部分があります。dynamic_bitsetを使用すると、ビットへのポインタを含むdynamic_bitsetオブジェクトが得られます。同じこと。

于 2011-10-13T22:11:41.653 に答える
1

機能リクエストとしてブーストでチケットを作成します:チケット#13016(https://svn.boost.org/trac/boost/ticket/13016

于 2017-05-08T12:28:12.323 に答える