2009-01-14 6 views
3

Par exemple, en utilisant la syntaxe suivante:traitement des options simple en utilisant la bibliothèque Boost (C++)

-I [file] -A 1 2 3 

Question:

Comment vérifier si un fichier a été spécifié et, en outre, si trois (nombre entier) ont été spécifiées.

Je comprends ce qui suit:

po::options_descriptions desc("Allowed options"); 
desc.add_options() 

Comment utiliser alors les arguments spécifiés, par exemple:

if (argv[3] == 1) { 
     ... 
    } 

Cordialement

Répondre

4

Vous utilisez le variables_map pour vérifier si des options ont été spécifiées. Si vous avez ajouté une option appelée "file" et votre variables_map a été appelé vm:

if(vm.count("myoption")) { ... } // Returns 0 if myoption not specified. 1 or more if it was. 

Une fois que vous avez utilisé add_options d'ajouter quelques options, vous pouvez y accéder comme si, en supposant que vous avez configuré un nom variables_mapvm:

vm["myoption"].as<int>() // Will return an int, assuming your option is an int 
vm["myoption"].as<std::string>() // Will return an std::string, assuming your option is an int 

Dans votre cas, vous souhaitez convertir l'une des options spécifiées en une séquence d'entiers. Vous pouvez le faire comme ceci:

vm["myoption"].as< std::vector<int> >() 

qui renvoie un vecteur contenant les 3 nombres entiers, vous pouvez indexer et utiliser comme tout vecteur normal. Pour voir s'il y a spécifiquement 3, utilisez simplement la fonction de membre vectoriel size().

Le tutoriel d'amplification à ce sujet est situé here.

Questions connexes