повышение:: ошибка program_options или функция?

Очень простой пример:



#include <string>
#include <boost/program_options.hpp>

namespace po = boost::program_options;

int main(int argc, char* argv[])
{
    po::options_description recipients("Recipient(s)");
    recipients.add_options()
        ("csv",         po::value<std::string>(),     ""  )
        ("csv_name",    po::value<unsigned>(),        ""  )
    ;

    po::options_description cmdline_options;
    cmdline_options.add(recipients);

    po::variables_map vm;
    po::store(po::command_line_parser(argc, argv).options(cmdline_options).run(), vm);
    po::notify(vm);

    return 0;
}


И некоторые тесты:


>Test --csv test
in option 'csv_name': invalid option value

>Test --csv_name test
in option 'csv_name': invalid option value

>Test --csv_name 0

>Test --csv text
in option 'csv_name': invalid option value

>Test --csv 0

>Test --csv_name 0

>Test --csv_name 0 --csv text
multiple occurrences

Похож на то повышение:: параметр угроз program_option "csv" как "csv_name".
Действительно ли это - функция или ошибка?

12
задан Dmitriy 7 April 2010 в 02:38
поделиться

2 ответа

Да, это «особенность» из-за параметров синтаксического анализа по умолчанию стиля . Попробуйте использовать короткие параметры, например:

recipients.add_options()
    ("csv,c",      po::value<std::string>(), ""  )
    ("csv_name,C", po::value<unsigned>(),    ""  )
;

Или поиграйте с методом basic_command_line_parser :: style (int) . Я этого не пробовал, так что YMMV.

9
ответ дан 2 December 2019 в 21:02
поделиться

Боюсь, это ошибка. Но это должно быть исправлено в 1.42 - с какой версией вы пробовали?

5
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: