[EDIT]
Ancien titre : Récupérer le type d'un parametre et retourner un pointeur sur une valeur de ce type
Je l'ai modifié car il ne correspondait plus au problème...
[/EDIT]
Bon dimanche à tous!
Bon derrière ce titre mal tourné ce cache le fait que j'ai un petit souci de conception que je ne sais résoudre...
En fait la problématique est la suivante :
J'ai une classe que je vais appeler "Object". Le problème de cette classe est qu'elle est très générale : je ne sais absolument pas "quoi", et surtout que devra faire un objet de type Object...
Et le principale problème était de pouvoir stocker des paramètres "d'évolution" de manière transparente, cependant les paramètres pouvait être de n'importe quel type.
C'est pour ça que dans ma class "Objetc", j'ai un attribut membre "paramètre" de type "std::vector<long>", dans lequel je stock :
les valeurs des pointeurs associés aux paramètres "réels"
(Edit : d'ailleurs j'y pense : ne vaudrait il pas mieux stocker des pointeurs "void *" plutôt que des long ???)
Pas de souci pour rentrer les adresses dans mon vector, par contre pour les sortir...
Bon pour les faires rentrer, j'ai une fonctionet roule ma poule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Object::param_push_back(void *param);
Après au niveau de l'appel, ça reste assez user-friendly :
Et si après je veux le récupérer, je n'ai pour l'instant pas trouver mieux que de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Object object1(...); A_type param1; object1.param_push_back(¶m1);
Ce qui est très moyen au niveau de l'"use-friendly".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::vector<long>::iterator it; ... A_type param2 = *((A_type*)(*it));
L'ideal serait une fonction par exemple "get_param()", pour que l'on puissee faire "param2 = get_param();" voir "param2 = *get_param();".
J'ai bien penser à faire un truc du genre :
Mais bien sur ça marche pas, j'ai plein d'erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void* get_param(void *param, vector<long>::iterator jt) { return ((typeof(*param)*)(*jt) } ... A_type param2(...); param2 = *get_param(¶m2,it);Et en plus j'utilise "typeof()" ce qui d'après ce que j'ai lu semblerai être une fonction propre à gcc, donc ça me plait pas vraiment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part void* is not a pointer-to-object type
Est_ce que par miracle quelqu'un aurait une idée de comment je pourrait, en passant un paramètre dans ma fonction get_param, comment récupérer, soit un pointeur sur la valeur, soit la valeur directement ?
Je vous remercie par avance de toute l'aide que vous voudrait bien m'apporter![]()
Partager