Bonjour à tous,
Je souhaiterais me définir une stucture de donné qui contienne un ensemble de paramètres. Chacun de ces paramètres est identifié par un identifiant unique (un string) et est associé à une valeure qui peux être a priori de n'importe quel type.
Pour l'interface de ma structure de donnée, je voudrait pouvoir y ajouter des paramètre de n'importe quel type (ou du moins faisant partie d'un liste de type prédéfinie), qqch dans le style:
Ensuite, je souhaiterais pouvoir récuperer les valeurs typées de ces paramètres a partir de leurs identifiants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 double foo=1.0; my_class bar; ParameterSet.add_parameter("t",foo); ParameterSet.add_parameter("a",bar);
J'ai commencé à regarder du coté du type boost::variant dans l'objectif de faire qqch dans le gout de ce qui suit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double foo2=ParamSet.get_parameter("t"); my_class bar2=ParamSet.get_parameter("a");
Ce qui ne me convient pas dans cet exemple: pour récuperer les valeurs typées des paramètres, je voudrais que l'utilisateur n'ai pas à s'embéter avec la syntaxe de boost. Je voudrais que l'utilisation de boost soit gérée en interne dans la classe ParamSet et remplacer en gros:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #include <iostream> #include <stdlib.h> #include <string> #include <vector> #include <map> #include "boost/variant.hpp" using namespace std; typedef boost::variant < int, double, std::string, vector<int> > param_value_type; class ParamSet { public: void add_param(string id, param_value_type val) { map_.insert(pair<string, param_value_type>(id, val)); }; map<string,param_value_type> map_; }; int main(int argc, char** argv){ int i=2; double d=1.2; string s="plop"; ParamSet paramset; paramset.add_param("i",i); paramset.add_param("d",d); paramset.add_param("s",s); int i2=boost::get<int>(paramset.map_["i"]); double d2=boost::get<double>(paramset.map_["d"]); string s2=boost::get<string>(paramset.map_["s"]); cout << "i2=" << i2 << endl; cout << "d2=" << d2 << endl; cout << "s2=" << s2 << endl; }
Par une méthode avec un syntaxe du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part int i2=boost::get<int>(paramset.map_["i"]);
Merci d'avance pour votre aide!
Code : Sélectionner tout - Visualiser dans une fenêtre à part int i2=paramset.get("i");
Partager