質問

C ++でビットセットを作りたいです。私は少し研究をしました。私がこのような場所で見つけたすべての例:

bitset<6> myBitset;
// do something with it

しかし、クラスの変数を定義するとき、ビットセットのサイズがわかりません。

#include <bitset>
class Test
{
public:
     std::bitset *myBitset;
}

これはコンパイルされません...

このように初期化も機能しません。

int size = getDependentSizeForBitset();
myBitset = new bitset<size>();
役に立ちましたか?

解決

ブーストには dynamic_bitset 使用できます。

または、aを使用できます vector<bool>, 、(残念ながら)ビットセットとして機能するように特徴的です。これは多くの混乱を引き起こし、一般的に悪い考えと見なされます。しかし、それがそれが機能する方法なので、それがあなたが必要とするなら、あなたもそれを使用するかもしれないと思います。

他のヒント

Boosts dynamic_bitesetをチェックする必要があります。

あなたが最初に言っていることは真実ではありません。 「見つけた例」は、あなたが投稿したようには見えませんでした。コンセントでない値を使用してテンプレートをパラメーター化することは不可能です。したがって、最初の例は無効です。一定の式のみがテンプレートの非タイプの引数として機能します。 IE非タイプの引数は、コンパイル時間定数でなければなりません。

サイズがコンパイル時定数ではないビットセットを作成したいように見えます。この場合 bitset テンプレートは問題外です。実行時間サイズのビットセットの実装が必要です。たとえば、使用できます std::vector<bool> - 多くの(すべてではないにしても)実装では、このテンプレートは実装するように特化しています 詰め込まれています 各要素が1ビットを占めるのではなく、1つのブール値の配列 bool 物体)。

ビットセットはテンプレートパラメーターとしてサイズを必要とします。つまり、サイズはコンパイル時に決定できる必要があります。ユーザー入力のように、ランタイム状態に基づくことはできません。

そのために、std :: vectorまたはboost :: dynamic_bitesetを調べる必要があります。 STD :: Vectorは、要素ごとに1ビットを使用する特殊なテンプレートインスタンス化です。ビットセットとは異なり、動的にサイズにすることができます。

あなたはあなたのクラスを作成して、 std::bitset クラスがインスタンス化されるまで、サイズは未定です。あなたはこのようにそれをすることができます:

#include <bitset>

template<int size>
class Test
{
public: 
    std::bitset<size> bitset;
    //...
}

その後、クラスを使用するには、これを行う必要があります。

int exampleSize = 42;
Test<exampleSize> name;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top