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 :

Implémenter une fonction virtuelle pure avec une instanciation explicite de template


Sujet :

Langage C++

  1. #1
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut Implémenter une fonction virtuelle pure avec une instanciation explicite de template
    Bonjour à tous,

    Tout est dans le titre. D'un côté, j'ai une classe d'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class my_interface
    {
        virtual void foo(int i) = 0;
    };
    De l'autre une classe pouvant l'implémenter, ayant une fonction template du même nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class my_impl
    {
        template<typename T>
        void foo(T t)
        {
            //fait des choses avec t
        }
    };
    Comment faire pour que my_impl puisse implémenter my_interface ?
    Si je laisse comme ci-dessus, le compilateur me dit que foo(int) est virtuel pur, donc que my_impl ne peut être instancié.

    J'ai donc pensé à créer une instanciation explicite de foo() pour le type int, mais j'ai toujours le même message :
    le .h
    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
    class my_impl: public my_interface
    {
        template<typename T>
        void foo(T t);
    };
     
    template<typename T>
    void my_impl::foo(T t)
    {
        //…
    }
     
    //spécialisation
    template<>
    void my_impl::foo(int i);
    le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //instanciation explicite
    template
    void my_impl::foo(int i);
    Que faire pour arriver à mes fins ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class my_impl: public my_interface
    {
        template<typename T>
        void foo(T t);
        void foo(int i) { foo<int>(i); }
    };
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Moi qui pensait avoir posé une super colle

    Merci
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/10/2013, 12h08
  2. Réponses: 5
    Dernier message: 14/10/2012, 19h25
  3. Réponses: 15
    Dernier message: 08/07/2012, 23h49
  4. Réponses: 8
    Dernier message: 16/10/2006, 12h28
  5. Réponses: 2
    Dernier message: 05/03/2006, 19h29

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