on peut faire ça avec les templates ???????? [C++] - Programmation
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.
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 ...
Marsh Posté le 08-06-2001 à 13:23:35
enfin, on peut toujours passer par un void *
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(); ??
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 ...
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...
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 ?
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
[edit]--Message édité par wpk--[/edit]
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);
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 ...
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 ...
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...
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 ...