Чтение одного параметра из конфигурационного файла, где есть больше параметров, с параметром boost program_options

У меня есть файл cfg как следующее:

parameter1="hello"parameter2=22
parameter3=12

С помощью boost_program чтобы прочитать все параметры отлично работает с этим кодом:

po::options_description options("Options");
options.add_options()
("help,h", "produce help message")
("parameter1", po::value<string>(&parameter1)->default_value("bye"),
"parameter1")
("parameter2", po::value<int>(&parameter2)->default_value(2),
"parameter2")
("parameter3", po::value<int>(&parameter3)->default_value(4),
"parameter3");po::variables_map vm;
po::store(po::parse_command_line(argc, argv, options), vm);
notify(vm);

try
{
po::store(po::parse_config_file< char >(filePath, options), vm);
}
catch (const std::exception& e)
{
std::cerr << "Error parsing file: " << filePath << ": " << e.what() << std::endl;
}

Но когда я пытаюсь сделать универсальный метод, где я просто хочу прочитать один параметр, данный из вызова, у меня возникает ошибка синтаксического анализа.

Я хочу прочитать второй параметр, например, поэтому я пишу это:

const char parameter_string = "parameter2";
int default = 30;
int parameter;
getparameter(parameter_string,parameter,default);

и идет в метод получает параметр, где это то, что у меня есть на этот раз:

po::options_description options("Options");
options.add_options()
("help,h", "produce help message")
(parameter_string, po::value<int>(&parameter)->default_value(default),
"reading parameter");

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

но ошибка такова:

Ошибка разбора файла: file.cfg: неизвестный параметр параметр1

Поэтому мой вопрос: возможно ли чтение только одного параметра из файла или необходимо проанализировать все параметры с помощью boost_program в options.add_option включая столько строк, сколько параметров я пишу в файле конфигурации, а затем беру значение из параметра, который я хочу.

0

Решение

использование allow_unregistered функция:

Указывает, что незарегистрированные параметры разрешены и должны быть переданы
хоть. Для каждой команды, как токен, который выглядит как опция, но делает
не содержит распознанное имя, экземпляр basic_option будет
быть добавлен к результату, с полем «нераспознанное» установлено значение «истина». Это
можно собрать все нераспознанные варианты с помощью
Функция collect_unrecognized.

2

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

Поскольку я использую «parse_config_file», я вижу в документации, что «allow_unregistered» по умолчанию имеет значение false.

template<typename charT>
BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options< charT >
parse_config_file(std::basic_istream< charT > &,
const options_description &,
bool allow_unregistered = false);

Таким образом, я изменил свою строку так:

Старый код:

po::store(po::parse_config_file< char >(filePath, options), vm);

Новый код:

po::store(po::parse_config_file< char >(filePath, options, true), vm);

И как я уже сказал, это работает. Спасибо за ваш ответ.

0

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