boost :: program_options - это делает точное совпадение строк для параметров командной строки? - PullRequest
3 голосов
/ 16 ноября 2010

Кажется, есть проблема с выполнением boost :: program_options для option_description.

int main(int argc, char* argv[])
{
    boost::program_options::options_description desc("CmdLine utility");
    desc.add_options()
        ("hel", "hel message")
        ("help", "produce help message")
        ("helps","helps message")       
    ;
    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("help")) {
        std::cout << desc << std::endl;
    }
    if(vm.count("helps")) {
        std::cout << "helps..." << std::endl;
    }
    if(vm.count("hel")) {
        std::cout << "hel..." << std::endl;
    }
    return 0;
}

Выход -

C:\code>cmd.exe --helps
helps...
C:\code>cmd.exe --help
helps...
C:\code>cmd.exe --hel
helps...

Выходные данные меняются, если я меняю порядок добавления опций с помощью вызова add_options(). Также похоже, что program_options не выполняет полное совпадение командной строки, поэтому даже если вы введете подстроку опции, она будет рассматривать ее как допустимую без выполнения полного сравнения строк. Если это функция boost :: program_options, есть ли способ заставить ее выполнять точное сопоставление строк, а не сопоставлять подстроки? (Я использую Boost версии 1.42)

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

По умолчанию для program_option установлен бит стиля allow_guessing, поэтому совпадение подстроки достаточно. Поведение, которое вы наблюдаете, когда параметр соответствует префиксу командной строки, даже если есть другой параметр, который полностью соответствует, является ошибкой. Это исправлено в 1.45.

0 голосов
/ 16 ноября 2010

Может быть, вы ошиблись. Вы пример в порядке. Посмотрите на вывод, который я получил:

[vladimir@asa example]$ ./a.out --help
CmdLine utility:
  --hel                 hel message
  --help                produce help message
  --helps               helps message

[vladimir@asa example]$ ./a.out --hel
hel...
[vladimir@asa example]$ ./a.out --helps
helps...
...