IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Choisir le type d'une classe template en temps d'exécution


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Choisir le type d'une classe template en temps d'exécution
    Bonjour à tous, je ne sais pas si le titre est suffisamment clair.

    J'ai un programme avec une class template. J'aimerais que l'utilisateur puisse choisir le type de donnée utilisée para la classe, en temps d'exécution, au moyen d'un menu. En fait il s'agit d'arbres de recherche. Et j'aimerais pouvoir choisir s'il me garde des int, float ou double.

    Ce serait faire quelquechose comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
     
     
    int main(void)
    {
    	int opt;
    	cout<<" Choisir type de donnée:"<<endl;
    	cin>>opt;
    	switch(opt)
    	{
    		case 1: 
    				{
    					myClass<int> monObjet;
    					int auxvalue;
    				}
    				break;
    		case 2: 
    				{
    					myClass<float> monObjet;
    					float auxvalue;
    				}
    				break;
    		case 3: 
    				{
    					myClass<double> monObjet;
    					double auxvalue;
    				}
    				break;
    		default: cout<<" error"<<endl;
    	}
     
    	// faire des operations avec monObjet et auxvalue...
     
    	return 0;
    }

    Ce code ne fonctionne pas, parce que les variables monObjet et auxvalue sont seulement définies dans le switch, et donc je ne peux pas les utiliser en dehors.

    Étant donné que le reste des opérations est strictement le même, quel que soit le type de donnée, je cherche un moyen de le faire de cette façon pour éviter d'ecrire trois fois le même code. Y a t il une solution?

    Merci d'avance : )

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Fais que myClass<T> dérive d'un IMyClass et réintroduis le dynamisme avec le polymorphisme d'inclusion.
    En C++, le polymorphisme paramétrique par templates est un polymorphisme statique.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, merci pour ta réponse bien que je n'y comprends pas grand chose :/

    J'ai cherché quelques définitions, dans la FAQ ou sur google mais je ne parviens pas à comprendre ce que tu veux dire.

    Je suppose que c'est de la théorie qui me manque, si tu pouvais m'indiquer un lien en relation avec ce que je veux faire ou détailler un peu plus, ça m'aiderait beaucoup.

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class IMyClass { /* ... */ };
    template <class T> MyClass : public IMyClass { /* ... */ }
    Et dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void f (IMyClass* pmyclass /* ça peut être un MyClass<int>, un MyClass<bool>, un MyClass<NimporteQuelType>, ... */)
    {
    /* ... */
    }
    Je pense que c'est ça que voulait dire Luc.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Oui. Après il y a le décryptage.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    C'est un polymorphisme d'inclusion (héritage) classique, excepté que les classes filles sont des classes template.

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2010, 11h36
  2. Réponses: 7
    Dernier message: 22/02/2007, 16h57
  3. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48
  4. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36
  5. [Debutant][Collection] Création d'un vecteur de type d'une classe
    Par Tao® dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 22/04/2004, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo