Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5258 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°38102
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 12:50:20  profilanswer
 

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 ...

mood
Publicité
Posté le 08-06-2001 à 12:50:20  profilanswer
 

n°38120
wpk
Posté le 08-06-2001 à 13:15:30  profilanswer
 

tu entends quoi par pointeur generique ?

n°38123
tgrx
My heart is pumping for love
Posté le 08-06-2001 à 13:21:16  profilanswer
 

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.

n°38125
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 13:22:22  profilanswer
 

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 ...

n°38126
wpk
Posté le 08-06-2001 à 13:23:35  profilanswer
 

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


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
n°38129
tgrx
My heart is pumping for love
Posté le 08-06-2001 à 13:25:15  profilanswer
 

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

n°38130
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 13:25:45  profilanswer
 

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

n°38131
BENB
100% Lux.
Posté le 08-06-2001 à 13:26:08  profilanswer
 

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

n°38134
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 13:27:53  profilanswer
 

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 ?

n°38137
wpk
Posté le 08-06-2001 à 13:33:25  profilanswer
 

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  
mood
Publicité
Posté le 08-06-2001 à 13:33:25  profilanswer
 

n°38143
BENB
100% Lux.
Posté le 08-06-2001 à 13:39:49  profilanswer
 

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);

n°38146
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 13:41:33  profilanswer
 

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 ...

n°38148
freewol
Ceci n'est pas une citation
Posté le 08-06-2001 à 13:45:17  profilanswer
 

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 ...

n°38149
BENB
100% Lux.
Posté le 08-06-2001 à 13:47:44  profilanswer
 

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...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[C++] Templates et friends ??? HELP!!visual c++ et templates. pb de link...
Plus de sujets relatifs à : [C++] on peut faire ça avec les templates ????????


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)