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] argument template template avec argument non-type un peu complexe


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 547
    Points
    547
    Par défaut [Template] argument template template avec argument non-type un peu complexe
    Bonjour,
    (et déjà merci d'avoir survécu au titre )

    le code suivant échoue à la compilation sous VS 2005 avec l'erreur C3201: la liste des paramètres de modèle pour la classe de modèle 'TSomeClass' ne correspond pas à celle du paramètre de modèle 'AClass'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<typename T, typename T::type I>
    class TSomeClass
    {};
     
    template
    < template<typename T, typename T::type I> class AClass
    >
    class TTest
    {};
     
    TTest<TSomeClass> t;
    le code suivant compile bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<typename T, T I>
    class TSomeClass
    {};
     
    template
    < template<typename T, T I> class AClass
    >
    class TTest
    {};
     
    TTest<TSomeClass> t;
    Est-ce un problème du compilateur ou un code effectivement invalide ?
    J'ai des doutes sur l'écriture template<typename T, typename T::type I>, bien qu'elle compile indépendamment (et je n'ai pour l'instant rien vu dans la norme qui la permette\l'interdise).

    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 41
    Points
    41
    Par défaut
    Bonjour,
    comme I dépend de T, je ne le mettrait pas en paramètre template mais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<typename T>
    class TSomeClass
    {
    	typedef typename T::type I;
    };
     
    template
    < template<typename T> class AClass
    >
    class TTest
    {};
     
    TTest<TSomeClass> t;
    Est-ce que ça conviendrait ?

  3. #3
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Bonjour,

    Le code est valide, un problème de compilateur possible, mais tu devrais déjà passer à un compilo plus récent ... 2005 ca date un peu (surtout quand on parle de template).

  4. #4
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 547
    Points
    547
    Par défaut
    Merci pour vos réponses.
    Citation Envoyé par arthurG Voir le message
    Bonjour,
    comme I dépend de T, je ne le mettrait pas en paramètre template mais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<typename T>
    class TSomeClass
    {
    	typedef typename T::type I;
    };
     
    template
    < template<typename T> class AClass
    >
    class TTest
    {};
     
    TTest<TSomeClass> t;
    En fait I n'est pas un type mais une constante que je souhaite pouvoir manipuler à la compilation.
    Dans le cas présent, j'avais juste encapsulé un enumdans une struct (pour émuler quelque peu les class enum du C++0x).
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct MyEnum 
    {
        enum type
        { val1
        , val2
        };
    };
    Je vais me contenter d'un simple enum, ce sera suffisant dans mon cas.
    Citation Envoyé par Flob90 Voir le message
    Bonjour,

    Le code est valide, un problème de compilateur possible, mais tu devrais déjà passer à un compilo plus récent ... 2005 ca date un peu (surtout quand on parle de template).
    Ouf, j'avais peur que les syntaxes typename T(qui défini un paramètre template type) et typename T::type(qui défini un paramètre template non-type) étaient ambigües et que la second n'était pas permise.
    Quand au compilateur VS2005 ... (*gros soupir*) j'ai déjà du me battre pour qu'on abandonne VC6 , qui date encore plus (surtout quand on parle de template C++ programmation ).


  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je te rassure (?) mais le code ne compile toujours pas avec Visual 2010

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

Discussions similaires

  1. template avec argument template
    Par DakM dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2013, 01h05
  2. Problème avec argument par défaut de templates
    Par benlaug dans le forum Langage
    Réponses: 3
    Dernier message: 08/01/2012, 10h59
  3. Réponses: 11
    Dernier message: 20/11/2010, 14h08
  4. Template C++ constructeur avec arguments
    Par oc_alex86 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/11/2010, 15h45
  5. Fonction template recursive, avec imbrication de types
    Par YéTeeh dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 18h02

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