boostorg / boostorg/program_options

options cannot be stored in variables

Ouverte
#68 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
C++
Étoiles
136
Forks
117
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

It seems like storing options in variables doesn't work.

Sample code (based on tutorial):
```C++
#include
using namespace boost::program_options;

#include
using namespace std;

/* Auxiliary functions for checking input for validity. */

/* Function used to check that 'opt1' and 'opt2' are not specified
at the same time. */
void conflicting_options(const variables_map& vm,
const char* opt1, const char* opt2)
{
if (vm.count(opt1) && !vm[opt1].defaulted()
&& vm.count(opt2) && !vm[opt2].defaulted())
throw logic_error(string("Conflicting options '")
+ opt1 + "' and '" + opt2 + "'.");
}

/* Function used to check that of 'for_what' is specified, then
'required_option' is specified too. */
void option_dependency(const variables_map& vm,
const char* for_what, const char* required_option)
{
if (vm.count(for_what) && !vm[for_what].defaulted())
if (vm.count(required_option) == 0 || vm[required_option].defaulted())
throw logic_error(string("Option '") + for_what
+ "' requires option '" + required_option + "'.");
}

int main(int argc, char* argv[])
{
try {
string ofile;
string macrofile, libmakfile;
bool t_given = false;
bool b_given = false;
string mainpackage;
string depends = "deps_file";
string sources = "src_file";
string root = ".";

options_description desc("Allowed options");
desc.add_options()
// First parameter describes option name/short name
// The second is parameter to option
// The third is description
("help,h", "print usage message")
("output,o", value(&ofile), "pathname for output")
("macrofile,m", value(¯ofile), "full pathname of macro.h")
("two,t", bool_switch(&t_given), "preprocess both header and body")
("body,b", bool_switch(&b_given), "preprocess body in the header context")
("libmakfile,l", value(&libmakfile),
"write include makefile for library")
("mainpackage,p", value(&mainpackage),
"output dependency information")
("depends,d", value(&depends),
"write dependencies to ")
("sources,s", value(&sources), "write source package list to ")
("root,r", value(&root), "treat as project root directory")
;

variables_map vm;
store(parse_command_line(argc, argv, desc), vm);

if (vm.count("help")) {
cout << desc << "\n";
return 0;
}

conflicting_options(vm, "output", "two");
conflicting_options(vm, "output", "body");
conflicting_options(vm, "output", "mainpackage");
conflicting_options(vm, "two", "mainpackage");
conflicting_options(vm, "body", "mainpackage");

conflicting_options(vm, "two", "body");
conflicting_options(vm, "libmakfile", "mainpackage");
conflicting_options(vm, "libmakfile", "mainpackage");

option_dependency(vm, "depends", "mainpackage");
option_dependency(vm, "sources", "mainpackage");
option_dependency(vm, "root", "mainpackage");

cout << "two = " << vm["two"].as() << "\n";
cout << "depends = " << depends << "\n";
cout << "depends = " << vm["depends"].as() << "\n";
}
catch (exception& e) {
cerr << e.what() << "\n";
}
}
```

And here is an example console printout:
```
$ ./Gmame.exe -p e -d fg
two = 0
depends = deps_file
depends = fg
```

It seems like the provided storage variable is just being ignored? If this is incorrect somehow then the tutorial needs to be updated as well.

Building using boost 1.68 on Windows using MSVC 2017.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par le point d’entrée principal fourni et reproduisez l’exemple de ligne de commande avec Boost 1.68 sur MSVC 2017. Comparez les variables liées, telles que depends, avec les valeurs correspondantes de variables_map et vérifiez les indications du tutoriel concernant les variables de stockage. Le travail est considéré comme terminé lorsque le comportement est expliqué et soit corrigé, soit clairement documenté, et que l’exemple produit des valeurs cohérentes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp
Domaine
cli
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.