[C++] on peut faire ça avec les templates ????????

on peut faire ça avec les templates ???????? [C++] - Programmation

Marsh Posté le 08-06-2001 à 12:50:20    

Voila, j'ai une classe template, et je voudrais savoir si je peux déclarer un pointeur "générique" sur cette classe, ie qui puisse pointer sur n'importe quel template de cette classe ???
J'espere vraiment qu'on peut ...

Reply

Marsh Posté le 08-06-2001 à 12:50:20   

Reply

Marsh Posté le 08-06-2001 à 13:15:30    

tu entends quoi par pointeur generique ?

Reply

Marsh Posté le 08-06-2001 à 13:21:16    

Si tu as une classe A:
 
template<class T>
class A {};
 
A ma connaissance, un pointeur se definit comme suit :
A<T>* ptr;
Tu es oblige de preciser le template.

Reply

Marsh Posté le 08-06-2001 à 13:22:22    

Ben comme je l'ai dis, un pointeur qui puisse pointer sur n'importe quel template.
Par ex :  
template <typename Type> class Bidule
     {
     Type t;
     };
 
Bidule *ptrGenerique;
 
Et qu'ensuite je puisse faire :
Bidule<double> B1;
Bidule<int> B2;
ptrGenerique = &B1;
ptrGenerique = &B2;
 
Voila ...

Reply

Marsh Posté le 08-06-2001 à 13:23:35    

enfin, on peut toujours passer par un void * :)


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 08-06-2001 à 13:25:15    

ouais mais si t'as un  
void* ptr;
 
est-ce que le compilo accepte un
 
ptr->methode(); ??

Reply

Marsh Posté le 08-06-2001 à 13:25:45    

mouais, j'y ai évidemment pensé, mais après c'est un peu plus dur de faire ptrGenerique->t ... :(

Reply

Marsh Posté le 08-06-2001 à 13:26:08    

Je ne pense pas que ce soit possible...
 
Mais fait heriter ton template d'une classe non template...
 
ou alors utilise un template...

Reply

Marsh Posté le 08-06-2001 à 13:27:53    

BENB a écrit a écrit :

Je ne pense pas que ce soit possible...
 
Mais fait heriter ton template d'une classe non template...
 
ou alors utilise un template...




Euh ... Je comprends pas trop ce que tu veux dire, tu pourrais préciser STP ?

Reply

Marsh Posté le 08-06-2001 à 13:33:25    

si je reprends le code freewol
template <typename Type> class Bidule  
     {  
     Type t;  
     };  
 
void *ptrGenerique;  
 
Et qu'ensuite je puisse faire :  
Bidule<double> B1;  
Bidule<int> B2;  
ptrGenerique = &B1;  
ptrGenerique = &B2;  
..........
dynamic_cast<Bidule<int> *>(ptrGenerique)->methode1(...);
 
c'est pas bo, c'est meme franchement crade mais je pense qu'on peut y arriver  :jap:

 

[edit]--Message édité par wpk--[/edit]


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 08-06-2001 à 13:33:25   

Reply

Marsh Posté le 08-06-2001 à 13:39:49    

1 - template <class T>
class Toto : public Bidon
{
}
 
et alors Bidon * peut pointer sur toute les classes Toto puisque toutes heritent de Bidon. c'est la methode si tu ne connais pas le type de la classe lors de la declaration de ton Pointeur
 
2-tu doit pouvoir faire  
toto<T> * pour un parametre de fonction (fonction template)
 
template <class T>
fct(toto<T> *ptr);

Reply

Marsh Posté le 08-06-2001 à 13:41:33    

en effet, c'est vraiment pas bô ;) Et je suis même pas sur que ça puisse marcher ...
Et même dans ce cas, ça m'intéresse pas trop, parce que à la base, ce problème me vient du fait que j'essaie justement d'enlever un code pas très propre ... Donc si j'en remet un autre au moins aussi dèg ...

Reply

Marsh Posté le 08-06-2001 à 13:45:17    

BENB a écrit a écrit :

1 - template <class T>
class Toto : public Bidon
{
}
 
et alors Bidon * peut pointer sur toute les classes Toto puisque toutes heritent de Bidon. c'est la methode si tu ne connais pas le type de la classe lors de la declaration de ton Pointeur
 
2-tu doit pouvoir faire  
toto<T> * pour un parametre de fonction (fonction template)
 
template <class T>
fct(toto<T> *ptr);




 
Le premier truc, t'es sur que ça marche ? Qu'un pointeur sur une classe mère peut pointer sur n'importe quelle classe dérivée ? Si c'est le cas, ça me va parfaitement ! :)
Par contre ton 2e truc m'intéresse pas, puisque je déclare un ptr global ...

Reply

Marsh Posté le 08-06-2001 à 13:47:44    

Pour le 1- il faut bien sur que tu declare des fct en virtual dans la classe de base... c'est du polymorphisme quoi !
 
Pour le 2- je suis desolee mais tu ne disais pas quelle utilisation tu voulais en faire...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed