質問

以下のような動的INIファイルをロードする方法はありますか。

[basic]
number_of_servers=3

[server1]
ip=10.20.30.40
password=sdfslkhf    

[server2]
ip=10.20.30.41
password=sdfslkhf

[server3]
ip=10.20.30.42
password=sdfslkhf

ここでの考えは、ここで定義されているサーバーはソフトウェアの展開に非常に固有のものであるということです。そのため、管理者は構成に参加するサーバーの数を決定します。

Boost Program_optionsでこれを処理する方法はありますか?

役に立ちましたか?

解決

別の、潜在的に標準的な方法は、次のようになります。

[basic]
number_of_servers=3

[server]
name=server1
ip=10.20.30.40
password=sdfslkhf    

[server]
name=server2
ip=10.20.30.41
password=sdfslkhf

[server]
name=server3
ip=10.20.30.42
password=sdfslkhf

このようにして、未定義のセクション名を心配する必要はありません。このスタイルは、より広く使用されていると思います(間違いなく、QuickFixが概説したものと非常によく似た方法です)。

そして、あなたはおそらく削除することができます number_of_servers エントリ、そしてそれを使用します count() いくつの数を見つける機能 server セクションがあります。

他のヒント

オプションがあります bool 未登録のエントリを可能にするパラメーター parse_config_file 働き。デフォルトではfalseに設定されています。ここでドキュメントを参照してください:

http://www.boost.org/doc/libs/1_45_0/doc/html/boost/program_options/parse_config_file_id991860.html

この関数をで呼び出す場合 true 次に、未登録のエントリをに追加します variables_map 文字列として。それらが存在するかどうかを確認できます variables_map::count 働き。

それが役立つことを願っています。

できますよ。サーバーセクションにはパターンがあります。パターンを一致させるすべてのものをサーバーのリストにロードするだけです。

これを解決しながら直面した課題は、セクションが一緒に保たれ、混同されないことを確認することでした。

最後に、既知の/有限オプションを使用したOptions_descriptionに依存し、Parse_config_fileから出てくるparsed_optionsを使用して、すべての認識されていないオプションをすべて収集する必要がありました(collect_unrecognized)。次に、オプションを順番に選択するために反復しなければなりませんでした。

貢献してくれてありがとう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top