Trouver le Type d'une classe template dynamiquement ?
Mon problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
class Mere
{
public:
Mere() { ;} // default ctor
};
template<class TYPE>
class Fille : public Mere // fille derive de Mere
{
TYPE i;
public:
Fille() { ; } // default ctor
Fille(const TYPE& j) : i(j) // ctor : copy j dans i
{ ; }
Fille& operator=(const Fille& f) { i = f.i;} // definition de l'opérateur =
};
int main(int argc, char *argv[])
{ Fille<int>* ptr1;
ptr1 = new Fille<int>(1);
//.... quelque part dans le programme ....
Mere* ptr2 = ptr1; // ptr1 et ptr2 pointent sur le même objet Fille<int>
ptr2 = new Fille<???>(); // cree un nouvel objet Fille<int> ????
(*ptr2) = (*ptr1); // use operator = de la classe Fille<int> |
apriori ptr2 ne connait pas le type de ptr1, mais si on veut dupliquer
les données, il doit connaitre le type utilisé dans le patron.
Mon problème c'est par quoi remplacer les <???>. Est ce que c'est
possible ?
Re: Trouver le Type d'une classe template dynamiquement ?
Citation:
Envoyé par Serge Iovleff
Trouver le Type d'une classe template dynamiquement ?
Déjà, ça c'est pas beau. C'est comme si tu demandais comment savoir dynamiquement si une variable est de type int ou float. En C++ les types sont statiques, donc tout le travail sur les types doit se faire à la compilation. Une identification dynamiques des types est possible mais pas dans ton cas. (Tu n'en as de toutes façon pas besoin.)
Citation:
Envoyé par Serge Iovleff
Mon problème :
Code:
1 2 3
|
Mere* ptr2 = ptr1;
ptr2 = new Fille<???>(); // cree un nouvel objet Fille<int> ???? |
Ce morceau de code ne me plait pas...
Tu initialise ptr2 pour écraser sa valeur juste après. Tu voulais faire quelque chose de particulier ?
Citation:
Envoyé par Serge Iovleff
apriori ptr2 ne connait pas le type de ptr1, mais si on veut dupliquer
les données, il doit connaitre le type utilisé dans le patron.
Mon problème c'est par quoi remplacer les <???>. Est ce que c'est
possible ?
Certes non, ce pauvre ptr2 ne connais pas le type de ptr1. Mais toi oui, toi tu connais parfaitement le type de ptr1. Et pour cause, c'est toi même qui a explicatement déclaré ptr1 comme Fille<int>. La solution à ton problème est donc: remplace ??? par int.
Citation:
use operator = de la classe Fille<int>
En revanche, ce commentaire pose problème. Pourquoi diantre voudrais-tu que le compilateur comprenne que tu souhaite enfait appeler la fonction operator= définie dans Fille alors que *ptr2 est de type Mere. Le compilateur ne va pas comprendre...
Réfléchis bien à ce que tu souhaites obtenir. J'ai l'impression que tout n'est pas bien clair dans ta tête...