0

以下のような動的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

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

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

4

4 に答える 4

3

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

[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

于 2010-12-13T00:37:14.367 に答える
2

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_mapas 文字列に追加されます。関数で存在するかどうかを確認できvariables_map::countます。

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

于 2010-12-13T00:32:50.263 に答える
0

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

于 2010-12-12T23:19:49.960 に答える
0

これを解決する際に私が直面した課題は、セクションがまとまり、混同されないようにすることでした。

最後に、既知/有限のオプションを含む options_description に依存し、parse_config_file から出力される parsed_options を使用して、認識されていないオプション ( collect_unrecognized ) をすべて収集する必要がありました。次に、それを繰り返してオプションを順番に選択する必要がありました。

皆様の貢献に感謝いたします。

于 2010-12-22T11:59:02.773 に答える