problème avec une spécialisation de classe [C++] - C++ - Programmation
Marsh Posté le 21-03-2004 à 15:50:21
verdoux a écrit : Ca marchera jamais. |
j'avais bien compris que ça allait être dur de faire marcher ça ... mais bon si quelqu'un a une idée sur une manière classique de faire ce genre de truc, ça pourrait aider !
Marsh Posté le 21-03-2004 à 19:36:53
joel f a écrit : polymorphisme tout ca ..... |
ok disons que je déclare getValue comme virtuelle et que j'oublie le template, je met quoi comme type de retour ? void * ? je fais une union avec 1 int,1 bool, 1 float, 1 char * ???
pask si je laisse le template, il va pas toujours chercher la bonne fonction, et j'ai aucun moyen de lui dire de le faire, puisque je ne peux pas déclarer ma fonction comme template de fonction et comme virtuelle pure ...
Je vois pas trop quelle serait la meilleure solution
help !
Marsh Posté le 21-03-2004 à 20:13:36
Ben tu lui fait renvoyer un type Data* qui sera automatiquement
remplis correctement si tu surcharge tyes virtuelles par Int*,Char* etc ..
Marsh Posté le 21-03-2004 à 21:20:51
joel f a écrit : Ben tu lui fait renvoyer un type Data* qui sera automatiquement |
euh désolé, je suis un peu neuneu, mais je vois pas trop ce que tu veux dire ...
je fais un Data * genre
class Data
{int ival;
float fval;
...
}
je renvoie ça et la méthode appelante se débrouille pour prendre le bon champ ? c ça ?
Marsh Posté le 22-03-2004 à 10:34:36
t as mal declaré ton template..
et la il sert a rien .
et ca sert a rien non plus employer des mots savants qd on sais pas c'que ca veux dire
Code :
|
FK
Marsh Posté le 22-03-2004 à 12:17:52
Tu es gentil je sais ce que c'est qu'un template de classe, mais là ce que je veux c'est pouvoir mettre mes variables de type var * dans une liste... Or je ne pourrais pas en déclarant simplement un template, pask qu'il me dira que je dois spécifier le type que contient le template pour faire la liste...
Quand à la spécialisation, je ne parlais pas de spécialisation de template, mais bien de spécialisation de classe (à l'opposée d'une généralisation)... (enfin si je me rappelle bien mon lointain cours d'uml)
si je déclare Var comme ton Foo, comment je peux faire ça :
Code :
|
y'a un moyen de lui faire accepter un var<de n'importe quel type> dans la liste ?
Marsh Posté le 22-03-2004 à 12:26:23
oui. faut faire une classe de bases aux Var puisque des classes templates n'ont aucun lien de parenté.
Marsh Posté le 22-03-2004 à 12:29:23
Taz a écrit : oui. faut faire une classe de bases aux Var puisque des classes templates n'ont aucun lien de parenté. |
ok, je vais essayer ! merci Taz et les autres aussi !!!
merde !
avec
Var<int> i;Var <float> f;
list<VarBase * > li;
il me met un `VarBase' is an inaccessible base of `Var<int>' ...
par contre j'ai pensé à un truc, quand je récupère le varBase, il faut que je fasse un cast vers une var pour pouvoir faire getValue, pask j'ai toujours pas de moyen de faire une méthode getValue dans VarBase ... ???
Marsh Posté le 22-03-2004 à 12:34:08
et on en profite pour parler de nos petits copains les boost::any
Code :
|
Marsh Posté le 22-03-2004 à 12:37:47
ah je ne connaissais pas, mais effectivement c bo !
Marsh Posté le 21-03-2004 à 15:28:39
Bon j'ai un problème, je crois que c'est une spécialisation de classe mais je ne suis pas sur.
j'ai une classe VAR et trois classes dérivées : Float,Int,Boolean
Bon, je pense que vous aurez compris à quoi elles servent. Je veux juste implémenter pour l'instant une méthode get, et une méthode set. j'ai fait un essai comme ça :
Si je fais ce code :
Int i;
i.setValue(3);
cout << i.getValue() << endl;
ça marche...
le problème c'est qu'en situtation réelle, les var sont stockées dans une pile... du coup quand je les récupère, il me fait une erreur : no matching function for call to `Var::getValue()'
ben ouais pask justement quand ça marche, il sait dans quelle classe on est, donc il appelle la bonne fonction, mais si c'est un var, il ne sait pas laquelle appeler
Alors, y'a moyen de résoudre ça ? ou alors je dois modéliser les classes autrement ? j'ai bien pensé à d'autres méthode genre renvoyer une union, mais ça ne fait vraiment pas très orienté objet ...
Help siouplait !
Message édité par fucky_fuck le 21-03-2004 à 15:50:57