2011-02-13 3 views
3

Je charge un fichier ini avec boost property_tree. Mon fichier ini contient principalement des types "simples" (c'est-à-dire, des chaînes, des entiers, des doubles, etc.) mais j'ai certaines valeurs qui représentent un tableau.Boost property_tree - fonctionne avec des tableaux ou des conteneurs simples

[Example] 
thestring = string 
theint = 10 
theintarray = 1,2,3,4,5 
thestringarray = cat, dog, bird 

Je vais avoir du mal à trouver comment obtenir coup de fouet à la charge programmagically theintarray et thestringarray dans un objet conteneur comme vector ou list. Suis-je condamné à le lire comme une chaîne et à l'analyser moi-même?

Merci!

Répondre

7

Oui, vous êtes condamné à analyser par vous-même. Mais il est relativement facile possible:

template<typename T> 
std::vector<T> to_array(const std::string& s) 
{ 
    std::vector<T> result; 
    std::stringstream ss(s); 
    std::string item; 
    while(std::getline(ss, item, ',')) result.push_back(boost::lexical_cast<T>(item)); 
    return result; 
} 

qui peut être utilisé que:

std::vector<std::string> foo = 
    to_array<std::string>(pt.get<std::string>("thestringarray")); 

std::vector<int> bar = 
    to_array<int>(pt.get<std::string>("theintarray")); 
+0

Je suis nouveau pour stimuler ... mais ne se fend pas seulement travailler avec des chaînes? Donc, je ne peux pas utiliser cette fonction pour remplir un «vecteur »? –

+0

@TReddy: vous avez raison. J'ai mis à jour la réponse :) –

+0

@Polybox: en fait, j'ai eu exactement le même code quand j'ai posé cette question moins le modèle et lexical_cast ... mais maintenant que j'ai fait les modifications, j'obtiens un compilateur 'aucune fonction correspondante pour call' erreur ... les joies de C++ ... :) –

Questions connexes