Template et virtuelle pure - C++ - Programmation
Marsh Posté le 10-07-2003 à 23:34:07
A mon avis le problème vient d'ailleurs...
Quel compilateur ?
Passe un bout de code
Marsh Posté le 10-07-2003 à 23:58:29
ouais donne un truc à se mettre sous la dent
edit: no problem
bien sur faut les destructeurs, je les ai pas ecrit, j'ai pas tenté de compiler, mais ça doit marcher quand meme
Code :
|
Marsh Posté le 11-07-2003 à 14:20:09
Arf désolé pour le reatrd, je bosse avec GCC 3.1 sous project Builder (MAC OS X).
En fait pour simplifier mon code ressemble à :
Code :
|
j'espere etre clir c pas gagné.
Le but etant de fournir une class (ici ExprHolder) à laquelle je puisse
affecté une instance de Expression<T,E> sacahant que le type E est trés complexe et inconnu de l'utilisateur.
j'ai une tripotée d'opérateurs surchargée (+,-,/,*) qui construisent un objet Expression<T,E> a partir d'une ecriture du style x+2*ln(x) (expression template en fait).
Du style :
Variable<double> x,y;
ExprHolder<double> f = ln(x);
ExprHolder<double> g = 2*x;
double r = f(g(4));
*** J'ai corrigé mes erreurs de recopies désolé Taz ***
Marsh Posté le 11-07-2003 à 14:36:37
ché pas. déjà ton code est tres incomplet (il manque les constructeurs (pour les références, ça le fait pas))
tes fonctions virtuelles pures ne sont pas implémentées...
t'es sur que ton type E a une méthode eval?
pas la peine de faire des typedef dans tous les sens, tu peux garder celui de classe de base
et apres y a plein d'erreurs comme
my_expr = &xpr;
//...
Evaluable<T>& my_expr;
Marsh Posté le 11-07-2003 à 14:39:21
Désolé, pas bien de poster apres trop de boulot, plus de détails ici :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
Je corrige le poste plus haut désolé
Marsh Posté le 11-07-2003 à 14:49:50
Hmmmm des précisions ??
ca me agve severe j'ai juste besoin d'une classe qui encapsule un template quelconque fournissant une methode aprticuliere c pas sorcier qd même
Marsh Posté le 11-07-2003 à 14:54:58
ben on sait jamais et on ne peut pas exclure un bug du compilateur
alors avant les trucs critiques tu peux faire plusieurs choses
- typeid(truc) == typeid(type_attendu) (il faut stricte équivalence des types
- un dynamic_cast
- tu peux aussi en profiter pour t'afficher le nom du type
typeid(truc).name()
(il te faut <typeinfo> )
Marsh Posté le 11-07-2003 à 15:01:09
Ok je vais voir ce que ca donne ... sinon y a pas d'autre moyen d'arriver à mes fins ??
Marsh Posté le 11-07-2003 à 15:06:59
je sais pas franchement, j'ai du mal à saisir ton code par ce qu'incomplet. mais essaye d'abord les RTTI. moi j'ai déjà eu des bugs (sans meme avec des templates, juste une relation d'heritage) avec un 2.95, y a vait un problème au niveau du Type (je crée un new Derivee, mais le vrai type etait Base, donc ça plantait lamentablement). t'as un 3.1, c'est loin d'etre exclu, cette version n'est pas tres réputée
Marsh Posté le 11-07-2003 à 17:22:15
Arf gagné
les types sont pas corrects à l'invocation !!
Bon ben au moins deja ca venait pas de moi
Merci du coup de pouce !
Marsh Posté le 10-07-2003 à 09:42:26
y a t il des contre-indications à l'utilisation coinjointe de class template et de methode absatraite ???
j'ai une hierarchie de classe template qui dérive tous d'un classe template absatriate et qui surcharge une seule methode virtuelle pure.
Ca compile mais a l'execution je me prend des "Illegal function call" dans la tête .... Apres avoir tracer la chose y a des moments ou il ne peut pas récupérer l'adresses de la fonction surchargée dans la vtable et plante lamentablement
serais-je un idiot ou quoi ???