Voglio analizzare più argomenti della riga di comando utilizzando boost :: program_options. Tuttavia, alcuni argomenti sono stringhe racchiuse tra virgolette. Questo è ciò che ho -boost :: program_options - analisi di più argomenti della riga di comando in cui alcuni sono stringhe inclusi spazi e caratteri
void processCommands(int argc, char *argv[]) {
std::vector<std::string> createOptions;
boost::program_options::options_description desc("Allowed options");
desc.add_options()
("create", boost::program_options::value<std::vector<std::string> >(&createOptions)->multitoken(), "create command")
;
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
boost::program_options::notify(vm);
if(vm.count("create") >= 1) {
std::string val1 = createOptions[0];
std::string val2 = createOptions[1];
...
// call some function passing val1, val2.
}
}
questo funziona bene quando faccio
cmdparsing.exe --create arg1 arg2
Ma non lo fa lavoro quando faccio
cmdparsing.exe --create "this is arg1" "this is arg2"
da linea di comando di Windows. Per la seconda opzione, viene convertita in ["this" "is" "arg1" "this" "is" "arg2"]
nel vettore createOptions. Pertanto, val1
ottiene "this"
e val2
ottiene "is"
anziché "this is arg1"
e "this is arg2"
rispettivamente.
Come posso utilizzare boost :: program_option per farlo funzionare?
Questo funziona su Linux. –
La prima cosa da verificare è il modo in cui il sistema operativo fornisce tali opzioni al programma. Se 'cmdparsing.exe --create this è arg1' e' cmdparsing.exe --create "questo è arg1" 'si ottiene lo stesso contenuto per l'array' argv', quindi devi trovare un altro modo per convincere il tuo SO che la parte tra virgolette deve essere tenuta insieme. –