Définir la taille de bitset à l'initialisation?
Je veux faire un bitset en C++. J'ai fait un peu de recherche. Tous les exemples que j'ai trouvé où, comme ceci:
bitset<6> myBitset;
//do something with it
Mais je ne sais pas la taille de la bitset quand j'définir la variable dans ma classe:
#include <bitset>
class Test
{
public:
std::bitset *myBitset;
}
Ce ne compile pas...
Et de l'initialisation comme cela aussi ne fonctionne pas:
int size = getDependentSizeForBitset();
myBitset = new bitset<size>();
source d'informationauteur Martijn Courteaux
Vous devez vous connecter pour publier un commentaire.
Boost a un
dynamic_bitset
vous pouvez utiliser.Alternativement, vous pouvez utiliser un
vector<bool>
qui (malheureusement) est spécialisé pour agir comme un bitset. Cela provoque beaucoup de confusion, et, en général, est considéré comme une mauvaise idée. Mais c'est comment il fonctionne, donc si c'est ce que vous avez besoin, vous pouvez aussi bien l'utiliser, je suppose.Utilisation Boost::dynamic_bitset
Vous devriez vérifier stimule dynamic_bitset.
Ce que vous dites au début n'est pas vrai. Les "exemples vous avez trouvé" ne semble pas que vous avez posté. Il est impossible d'utiliser une non-valeur de la constante de paramétrer un modèle. Donc, votre premier exemple n'est pas valide. Seulement des expressions constantes peuvent servir comme des non-arguments de type pour un modèle. I. e. le non-type de l'argument doit être une constante de compilation.
Dirait que vous voulez créer un bitset dont la taille n'est pas une constante de compilation. Dans ce cas, le
bitset
modèle est hors de question. Vous avez besoin d'une mise en œuvre de l'exécution de taille bitset. Par exemple, vous pouvez utiliserstd::vector<bool>
- dans la plupart (si pas tous) des implémentations de ce modèle est spécialisé pour mettre en œuvre un paniers tableau de valeurs booléennes, où chaque élément occupe un peu (par opposition à unbool
objet).bitset exige de la taille d'un paramètre du modèle, ce qui signifie la taille doit être capable d'être déterminé au moment de la compilation. Il ne peut pas être fondée sur un runtime condition, comme la saisie de l'utilisateur.
Pour cela, vous devez regarder dans std::vector ou boost::dynamic_bitset. std::vector est une institution spécialisée dans l'instanciation d'un modèle qui utilise un bit par élément. Contrairement à bitset, il peut être dynamiquement la taille.