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

C++ Discussion :

Argument template par défaut et données membres d'un classe non-template


Sujet :

C++

  1. #1
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut Argument template par défaut et données membres d'un classe non-template
    Bonjour,

    je cherche à utiliser un argument template par défaut à l'intérieur d'une classe non-template et je n'y arrive pas.
    Concrètement, je crée une première classe template acceptant un argument template par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef DEFAULT_HPP
    #define DEFAULT_HPP
     
    struct empty{};
     
     
    template< class T = empty >
    class Default
    {
     
    };
     
    #endif
    Dans une autre classe non-template, je tente de déclarer une donnée membre de type Default en exploitant l'argument template par défaut empty:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef OTHER_HPP
    #define OTHER_HPP
     
    #include "default.hpp"
     
    class Other
    {
    private:
      Default m_foo; // ce que je pense être équivalent à Default<empty> m_foo;
    };
     
    #endif
    Pour une question de reproductibilité, je vous fournis un fichier principal sommaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "other.hpp"
     
     
    int main()
    {
      Other bar;
      return 0;
    }
    Quand je compile avec g++, j'obtiens le message d'erreur suivant :
    In file included from main.cpp:4:0:
    other.hpp:12:3: erreur: invalid use of template-name ‘Default’ without an argument list
    Pourriez-vous m'expliquer le problème?

    Merci!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Je viens de trouver la réponse : il faut quand même mettre les chevrons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef OTHER_HPP
    #define OTHER_HPP
     
    #include "default.hpp"
     
    class Other
    {
    private:
      Default<> m_foo; // équivalent à Default<empty> m_foo;
    };
    Personnellement, je trouve cette syntaxe plutôt moche.
    Je suis habitué à utiliser les arguments par défaut dans des classes template possédant plusieurs arguments et on ne se rend pas compte du problème.

    Est-ce qu'on peut faire plus joli en C++98 et sans typedef?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Points : 97
    Points
    97
    Par défaut
    Non ce n'est pas possible aussi bien en c++98 que en c++11.

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

Discussions similaires

  1. fonction template par défaut
    Par salseropom dans le forum C++
    Réponses: 2
    Dernier message: 17/01/2010, 18h22
  2. Date par défaut ou donnée dans la requête
    Par El Saigneur dans le forum Oracle
    Réponses: 7
    Dernier message: 09/10/2009, 11h14
  3. [Typo3] Emplacement des templates par défaut
    Par gleyral dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 31/01/2009, 13h22
  4. [Joomla!] Impossible de modifier le template par défaut
    Par MarcS dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 28/03/2007, 17h57
  5. Réponses: 15
    Dernier message: 21/08/2006, 02h41

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