Définir la taille du bitet à l’initialisation?

Je veux faire un bitet en C ++. J’ai fait un peu de recherche. Tous les exemples que j’ai trouvés étaient comme ceci:

bitset myBitset; // do something with it 

Mais je ne connais pas la taille du bitet lorsque je définis la variable dans ma classe:

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

Cela ne comstackra pas …

Et initialiser comme ça ne marche pas non plus:

 int size = getDependentSizeForBitset(); myBitset = new bitset(); 

Boost a un dynamic_bitset vous pouvez utiliser.

Alternativement, vous pouvez utiliser un vector , qui (malheureusement) est spécialisé pour agir comme un bitet. Cela provoque beaucoup de confusion et est généralement considéré comme une mauvaise idée. Mais c’est comme ça que ça fonctionne, alors si c’est ce dont vous avez besoin, vous pourriez aussi bien l’utiliser, je suppose.

Utilisez Boost :: dynamic_bitset

Vous devriez vérifier boosts dynamic_bitset.

Ce que vous dites au début n’est pas vrai. Les “exemples que vous avez trouvés” ne ressemblaient pas à ceux que vous avez publiés. Il est impossible d’utiliser une valeur non constante pour paramétrer un modèle. Votre premier exemple n’est donc pas valide. Seules les expressions constantes peuvent servir d’arguments non typés pour un modèle. C’est-à-dire que l’argument non-type doit être une constante de compilation.

On dirait que vous voulez créer un ensemble de bits dont la taille n’est pas une constante de compilation. Dans ce cas, le modèle de jeu de bitset est hors de question. Vous avez besoin d’une implémentation de bitset de taille d’exécution. Par exemple, vous pouvez utiliser std::vector – dans de nombreuses (sinon toutes) implémentations, ce modèle est spécialisé pour implémenter un tableau compact de valeurs booléennes, où chaque élément occupe un bit (par opposition à un object bool ).

bitset nécessite size en tant que paramètre de modèle, ce qui signifie que la taille doit pouvoir être déterminée au moment de la compilation. Il ne peut pas être basé sur une condition d’exécution, comme une entrée utilisateur.

Pour cela, vous devriez regarder std :: vector ou boost :: dynamic_bitset. std :: vector est une instanciation de modèle spécialisée qui utilise un bit par élément. Contrairement aux bits, il peut être dimensionné dynamicment.