Как обрабатывать незапрашиваемые параметры в программе boost ::_options

Я использую boost::program_optionsдля обеспечения интерфейса синтаксического анализа командной строки для моего приложения. Я хотел бы настроить его для анализа параметров,

using namespace boost::program_options;
options_description desc("Allowed options");
desc.add_options()
    ("help,h", "produce help message")
    ("version,v", "print the version number")
    ("include-path,I", value< vector<string> >(), "include path")
    ("input-file,i", value<string>(), "input file");

positional_options_description p;
p.add("input-file", 1);

variables_map vm;

parsed_options parsed = command_line_parser(ac, av).
options(desc).positional(p).run();
store(parsed, vm);
notify(vm);

Я хотел бы настроить его так, чтобы каждый токен после последнего переключения возвращался в виде вектора. Я пытался использовать collect_unrecognizedв соответствии с примером, приведенным в документации Boost, но столкнулся с некоторыми проблемами, потому что я также использую позиционные аргументы для входного файла.

В основном я хотел бы сделать это так. Если у меня есть :

./program -i "inputfile.abc" argument1 argument2 argument3

, я бы хотел, чтобы он сохранял inputfile.abcв значении input-fileи возвращал vector<string>из argument1, argument2и argument3в качестве незапрашиваемых аргументов.

Однако я также хотел бы иметь возможность иметь позиционный аргумент, чтобы

./program "inputfile.abc" argument1 argument2 argument3

дал мне тот же результат.

Извините, если этот вопрос уже спрашивали, и спасибо за помощь.

6
задан ildjarn 16 April 2012 в 17:10
поделиться