2012-06-16 6 views
7

のすべてのエントリでは、ドキュメントによると、私のスタイルで設定ファイルを解析することができます:ブーストプログラムオプション - セクション

[main section] 
string = hello world. 
[foo] 
message = Hi ! 

しかし、私はプラグインのリストを解析する必要があります。

私は取得できますか
[plugins] 
somePlugin. 
HelloWorldPlugin 
AnotherPlugin 
[settings] 
type = hello world 

プラグインセクションにある文字列のベクトル?

答えて

10

ブーストプログラムオプション設定ファイルの場合、行が[settings]などのセクションを宣言していない場合は、name=valueの形式である必要があります。あなたたとえば、次のようにそれを書く:

[plugins] 
name = somePlugin 
name = HelloWorldPlugin 
name = AnotherPlugin 
[settings] 
type = hello world

プラグインのリストは今multitokenオプションにする必要がある「plugins.name」オプションに対応します。

以下

settings.iniファイルから上記の設定を読み込むプログラム例です:ところでどのように存在していないので、

plugin.name: somePlugin 
plugin.name: HelloWorldPlugin 
plugin.name: AnotherPlugin 
settings.type: hello world
+0

ありがとう:

#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; } 

次の出力を生成プラグイン名の前に "name ="を付ける必要はありませんか? – user1307957

+0

独自の顧客パーサーを書くことなく、いいえ。 –

+0

よろしくお願いします。 – user1307957

関連する問題