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?

War es hilfreich?

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:

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

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top