2012-07-01 5 views
5

Есть ли простой способ проверить, находится ли аргумент параметра внутри набора предопределенных вариантов? «Простой» здесь означает без определения класса ad-hoc.опции выбора опций форматирования

Предположим, у меня есть возможность --myoption который должен иметь значение "myvalue1" или "myvalue2"

, например, в питона очень легко с choices option in optparse

+1

Разве это не просто сравнение строк? Предполагая, что они являются 'std :: string', вы можете сделать' if ((arg == myvalue1) || (arg == myvalue2)) '. –

+0

уверен, что это работает, но мне нужно что-то более интегрированное в 'program-options' (например, оно может изменить справочное сообщение), например, работа с нестрокой –

+0

Возможно, вы захотите больше объяснить, что вы хотите сделать, это неясно. –

ответ

0

Как я только что понял, вы можете определить два взаимоисключающих варианта просто определение небольшая функция, как описано в real.cpp. Например, вы можете указать два противоположных варианта определения conflicting_options() функции:

void conflicting_options(const boost::program_options::variables_map & vm, 
         const std::string & opt1, const std::string & opt2) 
{ 
    if (vm.count(opt1) && !vm[opt1].defaulted() && 
     vm.count(opt2) && !vm[opt2].defaulted()) 
    { 
     throw std::logic_error(std::string("Conflicting options '") + 
           opt1 + "' and '" + opt2 + "'."); 
    } 
} 

и затем вызвать

conflicting_options (vm, "quiet", "verbose"); 

сразу после boost::program_options::store()

Проверка, что --myoption равно myvalue1 или myvalue2 становится просто вопрос вызова функции.

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

 Смежные вопросы

  • Нет связанных вопросов^_^