2010-07-24 16 views
4

Je cherche un certain conteneur de paramètres simple et efficace qui agirait comme une représentation de fichiers en mémoire xml (ou fichier ini, comme un autre échantillon). Je veux dire, fondamentalement, il pourrait stocker des sections et des ensembles de paramètres pour chaque section, avoir des accesseurs faciles comme GetValue("ParameterName") et simple coulée de valeur de retour.C++ - paramètre question

Ce serait génial si elle est sérialisable.

J'ai écrit quelque chose comme ça hier et, bien, cela correspond à mes besoins, mais il y a probablement quelque chose de plus pratique et de plus flexible?

Peut-être une sorte de jeu de paramètres dans boost?

Merci

Répondre

8

Jetez un oeil à boost::program_options. Il fait ce que vous voulez et plus: l'analyse de fichiers INI, l'analyse des variables d'environnement, l'analyse des options de ligne de commande et l'extensibilité.

4

Avez-vous envisagé std::map<>?

+0

Je suis en ce moment en utilisant une enveloppe autour de 'boost :: unordered_map' qui pourrait être facilement commuté, à' std :: map' (encore j'apprécie vraiment les structures basées sur le hash :) Mais 'boost' et d'autres bibliothèques de modèles sont en fait connus pour leurs solutions à tous les problèmes, , Je pensais que quelque chose de plus pratique peut exister ... –

+0

Consideri ng il va utiliser std :: map, je me demande quel pourrait être le moyen le plus simple de le sérialiser? – Vargas

+0

@Vargas ** 'boost :: serialize', je suppose. ** Dans mon cas, j'ai dû écrire une routine de sérialisation personnalisée pour' boost :: unordered_map' et, bien, ce n'est pas si difficile que ça en a l'air :) –

2

Ce n'est pas si c'est trop ou pas, mais le Message class dans MUSCLE fait tout ce que vous avez énuméré ci-dessus. Vous pouvez l'utiliser pour sérialiser n'importe quel type de données (structuré ou non) ou l'utiliser comme conteneur en mémoire pour les fichiers de configuration de style .ini analysés via ParseFile()/UnparseFile().

1

Vous pouvez utiliser Boost.PropertyTree.

Il lit et écrit des fichiers xml et ini.

Il stocke les paramètres comme un arbre et vous pouvez utiliser la notation de points pour accéder aux valeurs:

std::string value = pt.get<std::string>("debug.filename"); 

Vous pouvez également insérer de nouvelles valeurs à l'aide:

pt.put("debug.filename", fileName);