[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 fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Object::param_push_back(void *param);
et roule ma poule.
Après au niveau de l'appel, ça reste assez user-friendly :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Object object1(...);
A_type param1;
object1.param_push_back(&param1);
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
 
std::vector<long>::iterator it;
...
A_type param2 = *((A_type*)(*it));
Ce qui est très moyen au niveau de l'"use-friendly".
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 :
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(&param2,it);
Mais bien sur ça marche pas, j'ai plein d'erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
void* is not a pointer-to-object type
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.

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