Wenn die Option config-Dateien für Programmoptionen aktiviert ist, wenn die Zeile keinen Abschnitt deklariert, z. B. [settings]
, muss sie in einem Format name=value
vorliegen. Für Ihr Beispiel, schreiben Sie es wie folgt:
[plugins]
name = somePlugin
name = HelloWorldPlugin
name = AnotherPlugin
[settings]
type = hello world
Die Liste der Plugins nun auf die „plugins.name“ Option entsprechen wird, die eine Multitoken Option sein muss.
Unten ist ein Beispielprogramm, das die oben genannten Einstellungen aus einer Datei settings.ini lautet:
#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;
}
, die die folgende Ausgabe erzeugt:
plugin.name: somePlugin
plugin.name: HelloWorldPlugin
plugin.name: AnotherPlugin
settings.type: hello world
Danke, so ist es nicht Art und Weise, wie man tun Sie es, ohne "name =" vor plugin name zu haben? – user1307957
Ohne Ihren eigenen Kundenparser zu schreiben, nein. –
Ok, vergiss es. – user1307957