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 :

Spécialisation de fonctions template pour certaines valeurs


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut Spécialisation de fonctions template pour certaines valeurs
    Bonjour,

    J'aimerai savoir si il existe un moyen pour que certaines valeurs spécifiques de template puissent appeler des versions personnalisées de methodes ?
    Je m'explique, j'aimerais obtenir quelque chose ressemblant à ceci :

    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
    16
    17
    18
    19
    20
    template <int S>
    class toto
    {
        int calcul(int a, int b);
    };
     
    int calcul<3>(int a, int b)
    {
        /* calcul pour S = 3 */
    }
     
    int calcul<4>(int a, int b)
    {
        /* calcul pour S = 4 */
    }
     
    int calcul<S>(int a, int b)
    {
        /* calcul pour toutes les autres valeurs de S */
    }
    Certaines valeurs remarquables de S permettent d'accelerer le calcul, je voudrais donc écrire la fonction calcul pour ces valeurs spécifiques de S et laisser la génération automatique de code gérer les autres cas.

    Je pourrais bien évidemment simplement utiliser des conditions, mais je suis à la recherche maximum de vitesse et un embranchement conditionnel me fait perdre environ 10% au temps d'execution.

    Merci d'avance.

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,

    Oui, c'est tout à fait possible grâce à la spécialisation (mot clé pour les recherches : "template specialization") :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include <iostream>
     
    template <int S>
    class toto
    {
    public:
        int calcul(int a, int b);
    };
     
    template <int S>
    int toto<S>::calcul(int a, int b)
    {
        /* calcul pour toutes les autres valeurs de S */
      return 0;
    }
     
    template <>
    int toto<3>::calcul(int a, int b)
    {
      /* calcul pour S = 3 */
      return 3;
    }
     
    template <>
    int toto<4>::calcul(int a, int b)
    {
        /* calcul pour S = 4 */
      return 4;
    }
     
    int main()
    {
      toto<3> t3;
      std::cout <<  t3.calcul(0, 0) << std::endl;
     
      toto<4> t4;
      std::cout <<  t4.calcul(0, 0) << std::endl;
     
      toto<5> t5;
      std::cout <<  t5.calcul(0, 0) << std::endl;
    }

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Voici le lien correspondant de la FAQ si t'as d'autres questions sur les templates.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/10/2012, 15h02
  2. [VxiR2] rupture conditionelle (afficher que pour certaine valeur)
    Par pierregaya dans le forum Webi
    Réponses: 8
    Dernier message: 16/10/2009, 10h06
  3. Réponses: 0
    Dernier message: 18/08/2009, 12h00
  4. Problème de spécialisation de fonction template membre
    Par Davidbrcz dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2007, 20h01
  5. fonction template pour container
    Par Bourrine dans le forum Langage
    Réponses: 8
    Dernier message: 26/06/2007, 13h55

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