Я хочу проанализировать несколько аргументов командной строки, используя boost :: program_options. Однако некоторые аргументы - это строки, заключенные в двойные кавычки. Это то, что у меня есть -boost :: program_options - разбор нескольких аргументов командной строки, где некоторые строки, включая пробелы и символы
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.
}
}
это прекрасно работает, когда я
cmdparsing.exe --create arg1 arg2
Но не работать, когда я
cmdparsing.exe --create "this is arg1" "this is arg2"
из командной строки окна. Для второго варианта он преобразуется в ["this" "is" "arg1" "this" "is" "arg2"]
в вектор createOptions. Таким образом, val1
получает "this"
и val2
получает "is"
вместо "this is arg1"
и "this is arg2"
соответственно.
Как использовать boost :: program_option, чтобы сделать эту работу?
Это работает на Linux. –
Первое, что нужно проверить, - это то, как ОС предоставляет эти параметры вашей программе. Если 'cmdparsing.exe -create это arg1' и' cmdparsing.exe -create ", это arg1" 'приводит к тому же содержимому для массива' argv', тогда вам нужно найти другой способ убедить вашу ОС что часть в кавычках должна храниться вместе. –