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 :

Classe template et enum T


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 123
    Par défaut Classe template et enum T
    Bonjour,

    Je désire créer une classe template pour gérer des triplets d'int ou de double uniquement d'où mon enum, le code suivant est faux mais c'est pour vous donner l'idée de ce que je veux faire. Si vous avez la solution, je suis bien sûr preneur !

    Merci d'avance !

    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
    42
    43
    44
    45
    46
    #ifndef VEC3_H
    #define VEC3_H
     
    #include <iostream>
     
    template <typename T>
    enum T { int, double };
     
    template <typename T>
    class Vec3
    {
    public:
    	T x;
    	T y;
    	T z;
     
    	Vec3(void);
    	~Vec3(void);
     
    	void set(const T &_x, const T &_y, const T &_z);
    	void print();
    };
     
    template <>
    Vec3<T>::Vec3(void)
    {
    }
     
    template <>
    Vec3<T>::~Vec3(void)
    {
    }
     
    template <>
    void Vec3<T>::set(const T &_x, const T &_y, const T &_z)
    {
    	x = _x; y = _y; z = _z;
    }
     
    template <>
    void Vec3<T>::print()
    {
    	std::cout<<x<<" "<<y<<" "<<z<<std::endl;
    }
     
    #endif

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Faut passer par un type_traits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <boost/type_traits/is_same.hpp>
     
    template<class T, bool EnableIf = (boost::is_same<T,int>::value || is_same<T,double>::value)> struct vector3D
    {
      static_assert(sizeof(T)==0, "invalid types in vector3D instanciation");
    };
     
    template<class T> struct vector3D<T,true>
    {
      // ton code
    };
    Une facon extensible est ensuite de stocker les types autorisés dans une mpl::list et d'utiliser mpl::fold au lieu de faire le || a la main.

  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
    Ca claque MPL et enable_if !

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 123
    Par défaut
    Bonjour et merci de vos réponses.

    Donc il n'y a pas de façon de faire sans cette librairie ?

  5. #5
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    is_same n'est pas tres compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    template<class T, class U> struct is_same
    {
      static const bool value = false;
    };
     
    template<class T> struct is_same<T,T>
    {
      static const bool value = true;
    };

Discussions similaires

  1. Problèmes de fonctions membres de classe templates, gcc3.3.6
    Par yves.dessertine dans le forum Autres éditeurs
    Réponses: 12
    Dernier message: 17/10/2005, 21h36
  2. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48
  3. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56
  4. Class template hérité
    Par Azharis dans le forum Langage
    Réponses: 4
    Dernier message: 24/06/2005, 22h03
  5. Réponses: 6
    Dernier message: 06/10/2004, 12h59

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