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 Typename, Type conditionnel.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut Template Typename, Type conditionnel.
    Bonjour,

    J'ai une classe du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    template<typename T>
    class Test
    {
      public:
     
        My_Type foo(const My_type& value);
    };
    En fait j'aimerais faire en sorte que:
    si T = int, alors My_type = int,
    si T = vector<int>, alors My_type = int,

    en gros si T est un nombre alors My_Type = T
    si T est un vecteur de nombre, alors My_Type = nombre.

    J'ai essayé avec std:conditional<std::is_arithmetic, .....
    sans succès.

    Si vous avez une idée, ça m'intéresse :-)

    Un grand merci par avance en tout cas.

    Olivier

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    On y arrive généralement avec une classe de traits, même si ça peut être un peu verbeux :

    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
    #include <vector>
     
    // Comportement par défaut, pour les types qui ne sont pas concernés par les spécialisation de TestTraits qui vont suivre
    template <class T>
    struct TestTraits {
        // Commenter si aucun comportement par défaut n'est souhaité :
        typedef T type;
    };
     
    // Spécialisation pour le type int
    template <>
    struct TestTraits<int> {
        typedef int type;
    };
     
    // Spécialisation partielle, pour un vector
    template <class T>
    struct TestTraits<std::vector<T>> {
        typedef T type;
    };
     
    template<typename T>
    struct Test
    {
        typedef typename TestTraits<T>::type My_Type;
        My_Type foo(const My_Type& value);
    };

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut
    Super,

    J'avais un peut regardé ce type de class mais je n'avais pas un exemple simple me permettant de comprendre, donc merci beaucoup?.

    C'est vrai que c'est très verbeux, ca aurait été pas mal de pouvoir écrire quelque chose comme int::value_type, ca aurait été un appel générique avec les vecteur.

    Je vais creuser ma formation des class trait.

    Encore merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    sans passer par des traits, ne peut-on avoir une syntaxe comme telle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class content, class type = content >
    class Test
    {
      type foo(const content& value);
    };
    Code absolument pas testé.

    Mais à l'utilisation j'aime bien l'idée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test<int> testint;
    Test<vector<int>, int> testvectorint;
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Template et type
    Par olivier1978 dans le forum Langage
    Réponses: 7
    Dernier message: 12/02/2007, 00h55
  2. Réponses: 7
    Dernier message: 01/08/2006, 11h58
  3. Templates et Types.
    Par ousta dans le forum C++
    Réponses: 4
    Dernier message: 30/11/2005, 20h14
  4. [Débutant] template <typename T> et main()
    Par reggae dans le forum Langage
    Réponses: 6
    Dernier message: 22/10/2005, 18h57
  5. code incomprehensible (3 lignes) : template, typename
    Par xavlours dans le forum Langage
    Réponses: 7
    Dernier message: 25/02/2005, 14h45

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