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?

Était-ce utile?

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:

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

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top