Para aumentar los archivos de configuración de opciones del programa, si la línea no está declarando una sección, como [settings]
, entonces debe estar en un formato name=value
. Por su ejemplo, escribir como la siguiente:
[plugins]
name = somePlugin
name = HelloWorldPlugin
name = AnotherPlugin
[settings]
type = hello world
La lista de plugins corresponderá ahora a la opción "plugins.name", que tiene que ser una opción de la modalidad Multi.
continuación se muestra un ejemplo de programa que lee los ajustes anteriores de un archivo 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;
}
que produce el siguiente resultado:
plugin.name: somePlugin
plugin.name: HelloWorldPlugin
plugin.name: AnotherPlugin
settings.type: hello world
Gracias, así que no hay manera de cómo hacerlo sin tener que tener "name =" antes del nombre del plugin? – user1307957
Sin escribir su propio analizador de clientes, no. –
Ok, no importa. – user1307957