boostorg / boostorg/program_options

options cannot be stored in variables

Abierto
#68 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
136
Forks
117
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza con el punto de entrada principal proporcionado y reproduce el ejemplo de línea de comandos usando Boost 1.68 en MSVC 2017. Compara las variables vinculadas, como depends, con los valores correspondientes de variables_map y comprueba las indicaciones del tutorial sobre las variables de almacenamiento. Se considera terminado cuando el comportamiento está explicado y se ha corregido o documentado claramente, y el ejemplo produce valores coherentes.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
cpp
Área
cli
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.