Прежде чем вы скажете OVERKILL, мне все равно.Обработка «-» с boost.program_options
Как я могу сделать Boost.program_options обрабатывать необходимый параметр cat
-
?
У меня есть
// visible
po::options_description options("Options");
options.add_options()("-u", po::value<bool>(), "Write bytes from the input file to the standard output without delay as each is read.");
po::positional_options_description file_options;
file_options.add("file", -1);
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(options).positional(file_options).run(), vm);
po::notify(vm);
bool immediate = false;
if(vm.count("-u"))
immediate = true;
if(vm.count("file"))
support::print(vm["file"].as<vector<string>>());
, который вызывает исключение при запуске cat - - -
:
непризнанного варианта '-'
Я хочу это видеть -
как позиционный аргумент, и мне нужно это в правильном порядке в полном списке файлов. Как я мог это достичь?
UPDATE
У меня есть половина исправления. Мне нужно было
po::options_description options("Options");
options.add_options()("-u", po::value<bool>(), "Write bytes from the input file to the standard output without delay as each is read.")
("file", po::value< vector<string> >(), "input file");
po::positional_options_description file_options;
file_options.add("file", -1);
Проблема, я, кажется, только получить 2 из трех -
, когда я вывожу аргументы:
if(vm.count("file"))
support::print(vm["file"].as<vector<string>>());
где поддержка :: печать красиво обрабатывает вектор и прочее.
Boost.PO имеет свою собственную (вроде ограниченного) синтаксиса опций. Вероятно, вы можете использовать Boost.PO для синтаксиса, который вы хотите. – Abyx
@Oli: сделано. Благодарю. – rubenvb