Для форматирования конфигурационных файлов параметров программы, если строка не объявляет раздел, например [settings]
, тогда он должен быть в формате name=value
. Для примера, запишите его в следующем виде:
[plugins]
name = somePlugin
name = HelloWorldPlugin
name = AnotherPlugin
[settings]
type = hello world
Список плагинов теперь будет соответствовать опции «plugins.name», который должен быть multitoken вариант.
Ниже приведен пример программы, которая читает вышеуказанные параметры из файла settings.ini:
#include <boost/program_options.hpp>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
int main()
{
namespace po = boost::program_options;
typedef std::vector<std::string> plugin_names_t;
plugin_names_t plugin_names;
std::string settings_type;
// Setup options.
po::options_description desc("Options");
desc.add_options()
("plugins.name", po::value<plugin_names_t>(&plugin_names)->multitoken(),
"plugin names")
("settings.type", po::value<std::string>(&settings_type),
"settings_type");
// Load setting file.
po::variables_map vm;
std::ifstream settings_file("settings.ini" , std::ifstream::in);
po::store(po::parse_config_file(settings_file , desc), vm);
settings_file.close();
po::notify(vm);
// Print settings.
typedef std::vector<std::string>::iterator iterator;
for (plugin_names_t::iterator iterator = plugin_names.begin(),
end = plugin_names.end();
iterator < end;
++iterator)
{
std::cout << "plugin.name: " << *iterator << std::endl;
}
std::cout << "settings.type: " << settings_type << std::endl;
return 0;
}
который производит следующий вывод:
plugin.name: somePlugin
plugin.name: HelloWorldPlugin
plugin.name: AnotherPlugin
settings.type: hello world
Спасибо, так что это не способ, как сделать это без необходимости иметь «имя =» перед именем плагина? – user1307957
Без написания собственного анализатора клиентов, нет. –
Хорошо, неважно. – user1307957