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 :

Forward declaration avec templates


Sujet :

Langage C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut Forward declaration avec templates
    Bonjour à tous

    Je souhaite créer des objets liés entre eux par des pointeurs : A <-> B <-> C
    Sans template, pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // forward declaring
    struct B; struct C; 
     
    // declaring
    struct A { B* b; }
    struct B { A* a; C* c; }
    struct C { B* b; }
    Maintenant, même problème avec de templates :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // declaring
    template<typename B> struct A { B* b; }
    template<typename A, typename C> struct B { A* a; C* c; }
    template<typename B> struct C { B* b; }
     
    // specialization
    typedef A<B2> A2;          // B2 inconnu (error: ‘B2’ was not declared in this scope)
    typedef B<A2, C2> B2;     // C2 inconnu
    typedef C<B2> C2;
    Forcement, ça pose problème au niveau compilation puisque B2 et C2 ne sont pas connu dans A2 et B2 respectivement. J'ai essayé d'ajouter avant la spécialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template<typename T> struct B2;
    template<typename T1, typename T2> struct C2;
     
    typedef A<B2> A2; // (error: type/value mismatch at argument 1 in template parameter list for ‘template<typename B> struct A’
    Un idée du comment faire ?

    Merci

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Il faut un peu tordre ta conception. Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template<typename B> struct A { B* b; }
    template<template<typename T> class A, template<typename T> class C>
       struct B { typedef A<B> AA; typedef C<B> CC; AA* a; CC* c; }
    template<typename B> struct C { B* b; }
     
    // specialization
    typedef B<A, C> B2;     // C2 inconnu
    typedef B2::AA A2;     
    typedef B2::CC C2;

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Merci Jean-Marc

    J'avais essayé avec les template template mais sur A et B. Ta solution fonctionne sans problème.

    Merci

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

Discussions similaires

  1. c++ et les soucis avec les forwards declaration.
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 25/08/2014, 16h29
  2. Forward Declaration et template
    Par Zakaima dans le forum Débuter
    Réponses: 7
    Dernier message: 24/07/2012, 15h07
  3. forward declaration sous template
    Par Kurisu dans le forum Langage
    Réponses: 9
    Dernier message: 15/08/2008, 22h58
  4. Appel recursif avec template
    Par Math75 dans le forum Langage
    Réponses: 24
    Dernier message: 13/10/2005, 11h57
  5. Conversion avec template
    Par indy2 dans le forum Langage
    Réponses: 10
    Dernier message: 23/03/2005, 00h02

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