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"

из командной строки Windows. Для второго варианта он преобразуется в ["это" » is "" arg1 "" this "" is "" arg2 "] в векторе createOptions. Таким образом, val1 получает " this " и val2 получает 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"

из командной строки Windows. Для второго варианта он преобразуется в ["this" "is" "arg1" "this" "is" "arg2"] в векторе createOptions. Таким образом, val1 получает «this» , а val2 получает 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"

из командной строки Windows. Для второго варианта он преобразуется в ["this" "is" "arg1" "this" "is" "arg2"] в векторе createOptions. Таким образом, val1 получает «this» , а val2 получает "arg2"] в векторе createOptions. Таким образом, val1 получает «this» , а val2 получает "arg2"] в векторе createOptions. Таким образом, val1 получает «this» , а val2 получает "is" вместо "this is arg1" и "this is arg2" соответственно.

Как я могу использовать boost :: program_option, чтобы сделать это работает?

7
задан BЈовић 4 November 2010 в 08:50
поделиться