configuration dynamique avec program_options boost
-
09-10-2019 - |
Question
Est-il possible de charger un fichier INI dynamique comme celui ci-dessous.
[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
Ici, l'idée est que les serveurs qui sont définis ici est très spécifique au déploiement du logiciel; si l'administrateur décide combien de serveurs participer à la configuration.
Y at-il un moyen de gérer cela dans program_options boost?
La solution
Une autre façon potentiellement plus standard, serait comme ceci:
[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
De cette façon, vous n'avez pas besoin de vous soucier des noms de section non définies, et je pense que ce style est plus largement utilisé aussi bien (sans aucun doute c'est comment QuickFIX le fait, d'une manière très semblable à ce que je l'ai souligné).
Et vous pouvez probablement supprimer l'entrée de number_of_servers
, et il suffit d'utiliser la fonction count()
pour trouver combien de sections server
il y a.
Autres conseils
Il y a un paramètre bool
en option pour permettre des entrées non enregistrées dans la fonction parse_config_file
. Il est à false par défaut. Consultez la documentation ici:
Si vous appelez cette fonction avec true
il ajoutera des entrées non enregistrées dans la variables_map
sous forme de chaînes. Vous pouvez vérifier si elles existent avec la fonction variables_map::count
.
J'espère que cela aide.
Bien sûr, vous pouvez. Les sections de serveur ont un modèle: il suffit de charger tous ceux correspondant au modèle dans une liste de serveurs
.Les défis que je fait face tout en résolvant ce fut pour vous assurer que les sections sont maintenues ensemble et ne sont ainsi mélangés.
En fin de compte je me suis appuyé sur une options_description avec les options connues / finis, puis en utilisant les parsed_options qui sortent de parse_config_file, je devais recueillir toutes les options non reconnues (collect_unrecognized). Ensuite, je devais itérer pour choisir les options dans l'ordre.
Merci tout le monde pour leur contribution.