Boost Program_optionsを使用した動的構成
-
09-10-2019 - |
質問
以下のような動的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)。次に、オプションを順番に選択するために反復しなければなりませんでした。
貢献してくれてありがとう。