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 :

Paramètre par défaut d'une methode/fonction template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut Paramètre par défaut d'une methode/fonction template
    Bonjour.

    J'ai une déclaration de méthode que j'aimerai faire ressembler à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template<...>
    class Toto
    {
      char foo[3] = {1, 2, 3};
      int bar[3] = {42, 12, 3012};
    
      template <typename T>
      void foobar(T* a, T* b = ???);
    };
    Je souhaite initialiser b avec tantôt foo si T est un char tantôt bar si T est un int.

    Ma question est donc comment faire ?

    Puis-je écrire dans le point h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template<...>
    class Toto
    {
      char foo[3] = {1, 2, 3};
      int bar[3] = {42, 12, 3012};
     
      void foobar(char* a, char* b = foo);
     
      void foobar(int* a, int* b = bar);
    };
    et dans le point cc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // specialisation classe template 1
    template<> template <typename T>
    void Toto::foobar(T* a, T* b)
    {
      // implementation identique pour les deux template de methode
    }
     
    // specialisation classe template 2
    template<> template <typename T>
    void Toto::foobar(T* a, T* b)
    {
      // implementation identique pour les deux template de methode
    }
    Sachant que je n'ai que deux types. La déclaration ne se ferait donc que deux fois. Par contre comme la méthode est dans une classe template, elle est spécialisée pour 4 ou 5 types (de la classe). Je n'ai pas besoin de en plus réécrire les methodes pour chacun de ses template.

    Merci pour votre aide.

  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
    Si j'ai bien compris le fond de la question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <typename T> struct FooBarDefault;
    template <> struct FooBarDefault<char> {
       static char value[3];
    };
    template <> struct FooBarDefault<int> {
       static int value[3];
    };
     
    template <typename T>
    void foobar(T* a, T* b = FooBarDefault<T>::value);
    Et dans une seule unite de compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char FooBarDefault<char>::value[3] = { 1, 2 , 3 };
    int FooBarDefault<int>::value[3] = { 42, 12, 3012 };

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    C'est typiquement le rôle de classe de traits (cf FAQ et tuto )

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    C'était pas évident à trouver mais ça marche.

    Du coup c'est l'occasion de m'intéresser plus en détails aux traits.

    Merci à tous.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu as un tutoriel sur le sujet dans ma signature

    En effet, tu as du ressentir assez fortement un manque d'abstraction. Il fallait déléguer le choix de l'argument par défaut à une classe externe (classe de traits).

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

Discussions similaires

  1. [C#] Paramètre par défaut dans une fonction
    Par RobinJulie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2012, 14h07
  2. Paramètre par défaut dans une fonction
    Par airballman dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/05/2010, 08h41
  3. Paramètre par défaut dans une fonction
    Par Rodie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/06/2008, 10h26
  4. [PLSQL 9i] Paramètre par défaut d'une fonction
    Par lbgl dans le forum Oracle
    Réponses: 8
    Dernier message: 20/02/2007, 16h36
  5. Réponses: 2
    Dernier message: 19/03/2005, 17h09

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