dynamische Konfiguration mit Boost program_options
-
09-10-2019 - |
Frage
Gibt es eine Möglichkeit unter einer dynamischen INI-Datei wie das zu laden.
[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
Hier ist die Idee, dass die Server, die hier definiert sind, ist sehr spezifisch für den Einsatz der Software; so dass der Server-Betreiber entscheidet, wie viele Server in der Konfiguration teilnehmen.
Gibt es eine Möglichkeit, dies program_options im Boost zu behandeln?
Lösung
Ein weiterer, potenziell Standardweg, so sein würde:
[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
Auf diese Weise brauchen Sie nicht zu befürchten undefiniert Abschnittsnamen, und ich denke, diese Art weiter verbreitet als auch verwendet wird (auf jeden Fall ist es, wie QuickFIX es tut, in einer Art und Weise sehr ähnlich zu dem, was ich beschrieben).
Und Sie können wahrscheinlich den number_of_servers
Eintrag entfernen, und verwenden Sie nur die count()
Funktion zu finden, wie viele server
Abschnitte gibt.
Andere Tipps
Es gibt einen optionalen bool
Parameter für nicht registrierte Einträge in der parse_config_file
Funktion zu ermöglichen. Es wird standardmäßig auf false gesetzt. Lesen Sie die Dokumentation hier:
Wenn Sie diese Funktion mit true
rufen, dann wird es keine nicht registrierten Einträge in die variables_map
als Strings hinzufügen. Sie können prüfen, ob sie mit der variables_map::count
Funktion vorhanden ist.
Ich hoffe, das hilft.
Sicher Sie können. Die Server-Abschnitte haben ein Muster: nur alle diejenigen, die Muster in eine Liste von Servern passende laden
.Die Herausforderungen ich während dieser Lösung machen sollte, dass die Abschnitte zusammengehalten werden und sind keine Art und Weise vermischt.
Am Ende habe ich auf einem options_description mit den bekannten / endlich Optionen verlassen und dann die parsed_options verwenden, die von parse_config_file kommen, hatte ich alle nicht erkannten Optionen zu sammeln (collect_unrecognized). Dann hatte ich es wiederholen Sie die Optionen, um zu wählen.
Dank jeder für ihren Beitrag.