Поддерживает ли boost :: program_options одну из ряда альтернатив?

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

<application> [--one int-value1 | --two string-value2 | --three]

В приведенном выше пользователь должен передать точно один из вариантов: --one, --two, или же --three,

Я мог бы сделать это вручную, но надеюсь, что вместо этого есть встроенный механизм:

#include <boost/program_options.hpp>

namespace po = boost::program_options;

int main(int argc, char *argv[]) {
po::options_description options;
int band;
std::string titles_path;

options.add_options()
("one", po::value<int>(&band)->default_value(1))
("two", po::value<std::string>(&titles_path))
("three");

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, options), vm);

if (1 != (vm.count("one") + vm.count("two") + vm.count("three"))) {
std::cerr << options << std::endl;

return -11;
}
return 0;
}

Есть ли лучший способ сделать это с опциями повышения?

7

Решение

Валидатор program_options не поддерживает взаимозависимости параметров (включая отрицательные).

Вероятно, то, что вы делаете сейчас, на самом деле является лучшим вариантом.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]