Ich möchte mehrere Befehlszeilenargumente mit boost :: program_options parsen. Einige Argumente sind jedoch in Anführungszeichen eingeschlossene Zeichenfolgen. Das ist, was ich habe -boost :: program_options - Parsen mehrerer Befehlszeilenargumente, wobei einige Zeichenfolgen einschließlich Leerzeichen und Zeichen sind
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.
}
}
dies funktioniert gut, wenn ich
cmdparsing.exe --create arg1 arg2
tun Aber nicht Arbeit, wenn ich
cmdparsing.exe --create "this is arg1" "this is arg2"
von Windows-Kommandozeile tun. Für die zweite Option wird es in createOptions vector in ["this" "is" "arg1" "this" "is" "arg2"]
konvertiert. Somit erhält val1
statt "this is arg1"
und "this is arg2"
und val2
.
Wie kann ich boost :: program_option verwenden, damit dies funktioniert?
Dies funktioniert auf Linux. –
Die erste Sache zu prüfen ist, wie das OS diese Optionen zu Ihrem Programm zur Verfügung stellt. Wenn 'cmdparsing.exe - create dies ist arg1' und' cmdparsing.exe --create "das ist arg1" 'ergibt sich der gleiche Inhalt für das' argv' Array, dann müssen Sie eine andere Möglichkeit finden, Ihr Betriebssystem zu überzeugen dass der Teil in Anführungszeichen zusammengehalten werden muss. –