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 :

[template] petit probleme d'instanciation


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut [template] petit probleme d'instanciation
    bonjour

    pour des raison perso (j'utilise une bibliotheque de templates) j'aimerais faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    template<typename T> void function(){
    new T();
    }
    avec Alpha qui est une classe concrete et IBase qui est un interface
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Alpha {
    public:
          Alpha() {};
          virtual ~Alpha() {};
    };
     
    class IBeta {
    public:
         virtual void canDecode() = 0;
    };
    evidement function<Alpha>(); fonctionne
    et function<IBeta>(); plante a la compile

    y'a t'il une solution pour tester si le type T est abstrait dans la definition du template ?

    merci

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu sais que function<IBeta>();, c'est {return new IBeta();}?

    Parce comme IBeta::decode() est virtuelle pure, ça ne peut pas fonctionner.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    oui j'avais compris

    j'utilise un bibliotheque de reflexion http://www.extreme.indiana.edu/reflcpp/ et manifestement il ne l'on pas reflechi assez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename Obj_TP>
    PtrHolder_smptr_t 
    ClassType_body_tmpl<Obj_TP>::createInstance() const {
        return PtrHolder_smptr_t(new SmartPtrHolder_tmpl<Obj_TP>(new Obj_TP));
    }
    manifestement tu peux utiliser des classes abstraite (pour faire des interfaces), mais ca ne passe pas....

    ceci etant j'aimerais savoir si je peux faire un distinguo entre les Type abstrait et les type concret, forcement a la compilation
    disons un code pour les concrets et un autre pour les non concret

    c'est possible ca en c++ ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Oui, mais tu ne veux pas appeler createInstance sur une classe abstraite.
    Par contre, il doit y avoir une conversion possible entre les types de pointeurs.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    attend je reformule
    j'utilise une bibliothèque que je n'ai pas fait moi même (merci le net)
    je tente sans être obligé de tout deconstruire de trouver une solution pour éviter qu'il possède les méthodes createinstance (y'en a plusieurs) quand le type d’objet défini dans le Template se trouve être un type abstrait

    je sais très bien qu'on ne peut pas construire un objet abstrait

    ce que j'aimerais juste savoir c'est si on peut faire une compilation conditionnelle sur un Template en fonction du type
    ou autoriser quand même la compilation et résoudre le problème au runtime avec un try/catch par exemple

    enfin une solution pour que je n'ai pas a me refaire la librairie complète pour mettre une classe de base (templaté) avec des createinstance vide
    puis une classe dérivée avec le code et de revoir la compilation de gccxml et du compilateur natif pour utiliser soit l'une soit l'autre des classes
    mais la c un taf compiqué

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il y a bien les spécialisations de template, mais je n'en fais tellement peu que je t'envoie dans notre faq.

    Cela dit, pour moi, c'est la manière d'utiliser la bibliothèque qui est peut-être erronnée.

    As-tu essayé de modifier ton code appelant (qu'il faudrait nous montrer) pour fournir un std::nullptr, plutot que laisser la bibliothèque instancier?

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

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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