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 :

Créer un objet de type classe template sans savoir le type.


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 15
    Points : 28
    Points
    28
    Par défaut Créer un objet de type classe template sans savoir le type.
    Bonjour à tous et à toutes.

    J'aimerais savoir si il est possible de créer un objet d'une classe template sans savoir le type a l'avance? Je m'explique :

    J'ai une classe mere A contenant des méthodes abstraite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class RESULT_TYPE>
    class A
    {
        public:
            A(){}
            virtual RESULT_TYPE getValue(void) = 0;
            virtual void setValue(RESULT_TYPE v) = 0;
            virtual bool doSomething(void) = 0;
        private:
            RESULT_TYPE RESULT;
    }
    J'ai créé plusieurs classes fille dérivant de cette classe, histoire de pouvoir réécrire doSomething suivant les classes filles.

    Maintenant que mes classes mères et filles sont la, je peux donc écrire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        B<int, int, int> b;
        C<int, int, int> c;
        A<int> *a1= &b;
        A<int> *a2 = &c;
     
        a1->doSomething();
        a2->doSomething();
    Mon but maintenant est de pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        B<int, int, int> b;
        C<int, int, int> c;
        A *a1= &b;
        A *a2 = &c;
     
        a1->doSomething();
        a2->doSomething();
    donc ne plus à avoir a spécifier le type en déclarant un objet de classe A (histoire de pouvoir plus tard creer des fonctions prenant en paramètre un A* et non un A<type>* .

    Je voulais savoir si c'était possible, et si oui, comment faire? Mes recherches ont été veines

    Je vous souhaite une bonne journée !

  2. #2
    Invité
    Invité(e)
    Par défaut
    C'est impossible, tu dois toujours spécifier le type de retour pour des fonctions qui retournent quelque chose. (Ou bien lors de la création de la classe)

    Au pire, utilise, une classe de base.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 15
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Lolilolight Voir le message
    Au pire, utilise, une classe de base.
    Merci de ta réponse . Que veux-tu dire par "utiliser une classe de base" ? Faire une classe mère de A ne m'avancerai pas beaucoup dans mon cas je pense parce que cette classe mère devrait être elle même une classe template (à cause des types de retour/paramètres setValue et getValue).

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    typedef ? En renommant A en Base par exemple: typedef Base<int> A. S'il faut utiliser un autre type que int alors il faudra un autre typedef. Mais tu ne peux pas enlever <int> d'une template car cela fait partit intégrante du type (A n'est pas un type mais une template).

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 15
    Points : 28
    Points
    28
    Par défaut
    Okay merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un objet dont la classe est une variable
    Par jibe38 dans le forum Langage
    Réponses: 15
    Dernier message: 14/05/2014, 11h58
  2. Réponses: 5
    Dernier message: 23/04/2013, 19h29
  3. Réponses: 2
    Dernier message: 22/10/2012, 21h37
  4. Réponses: 5
    Dernier message: 31/10/2008, 12h24

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