2017-05-09 3 views
2

Je veux être en mesure de passer un entier via l'argument de la ligne de commande que j'appellerai length. Je dois rendre ceci constant, car il sera utilisé pour déterminer la taille de plusieurs bitsets. Je l'ai essayé de faire ce bien des façons, par exemple:Comment puis-je passer un int constant via un argument de ligne de commande en C++?

int main(int arc, const char* argv[]){ 
     const int * ptr; 
     if (!(istringstream{argv[1]} >> ptr)) { return 1;} 
     const int length = *ptr; 

     bitset<length> right_ones = 1; 
     return 0; 
} 

J'ai essayé aussi de cette façon:

int main(int arc, const char* argv[]){ 
     int test_int; 
     if (!(istringstream{argv[1]} >> test_int)) { return 1;} 
     const int length = argv[1]; 

     bitset<length> right_ones = 1; 
     return 0; 
} 

Mais aucun des moyens que je l'ai essayé travaillé. Comment puis-je accomplir cela?

+8

Si elle est passée via un argument de ligne de commande, elle n'est évidemment pas constante. – harold

+1

Obtenez votre DeLorean jusqu'à 88 mph. Exécutez le programme, observez les futures entrées de l'utilisateur, puis revenez et ajoutez-le. – molbdnilo

+2

Les modèles ne peuvent être utilisés qu'avec une constante de temps de compilation. Les valeurs qui passent avant l'exécution ne sont évidemment pas des constantes de temps de compilation –

Répondre

2

S'il est transmis comme argument de ligne de commande, vous ne pouvez pas en faire une constante.

D'ailleurs, cela est pertinent pour votre cas: Define bitset size at initialization?

+0

Bon, je pense que j'ai mal compris ce qu'est un const ... Y a-t-il un bit à utiliser? avec la longueur n'étant pas constante alors? Tant que je peux passer la taille du bitset via la ligne de commande, mon problème sera résolu. – partyphysics

+0

J'ai mis à jour ma réponse @partyphysics. Lisez le lien pour en savoir plus! – gsamaras

+0

Merci, le boost :: dynamic_bitset résout le problème – partyphysics

2

La longueur du bitset est nécessaire au moment de la compilation donc peu importe comment vous essayez il n'y a pas moyen de passer cette valeur lors de l'exécution.