Пользовательский валидатор Boost для Enum

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

namespace po = boost::program_options;

namespace Length
{

enum UnitType
{
    METER,
    INCH
};

}

void validate(boost::any& v, const std::vector& values, Length::UnitType*, int)
{
    Length::UnitType unit;

    if (values.size() < 1)
    {   
        throw boost::program_options::validation_error("A unit must be specified");
    }   

    // make sure no previous assignment was made
    //po::validators::check_first_occurence(v); // tried this but compiler said it couldn't find it
    std::string input = values.at(0);
    //const std::string& input = po::validators::get_single_string(values); // tried this but compiler said it couldn't find it

    // I'm just trying one for now
    if (input.compare("inch") == 0)
    {
        unit = Length::INCH;
    }   

    v = boost::any(unit);
}

// int main(int argc, char *argv[]) not included

И чтобы сэкономить включение большего количества кода, чем необходимо, я добавляю параметр следующим образом:

po::options_description config("Configuration");
config.add_options()
    ("to-unit", po::value >(), "The unit(s) of length to convert to")
;

Если требуется ошибка компилятора, я могу опубликовать ее, но надеялся, что вопрос будет прост. Я попытался найти примеры, но единственный другой пример, который я действительно смог найти, это examples / regex.cpp с веб-сайта Boost .

  1. Есть ли разница между моим сценарием и найденными примерами, за исключением того, что мой - это Enum, а остальные - структуры? РЕДАКТИРОВАТЬ: В моем сценарии не требовалась перегрузка настраиваемого валидатора.
  2. Есть ли способ перегрузить метод validate для Enum? РЕДАКТИРОВАТЬ: Не требуется.

21
задан Community 23 May 2017 в 12:34
поделиться