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 template : différencier deux types similaires


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Paramètre template : différencier deux types similaires
    Bonjour à tous,


    J'ai un tableau où pour positionner une valeur, on lui donne la valeur sous forme de void* et on lui indique son type par un identifiant.

    Les types de date prennent des double en fait, et il existe également le type double.
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    enum MesTypes
    {
        E_TYPE_INT = 1
        E_TYPE_DOUBLE = 2
        E_TYPE_FLOAT = 3
        E_TYPE_DATE = 4
        E_TYPE_INCONNU
    };
    Pour retrouver le type du tableau en fonction du type C++ je fais 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
     
    template<class T>
    struct TO_MY_TYPE
    {
        enum { Value = E_TYPE_INCONNU; }
    };
     
    template<>
    struct TO_MY_TYPE<int>
    {
        enum { Value = E_TYPE_INT; }
    };
     
    template<>
    struct TO_MY_TYPE<float>
    {
        enum { Value = E_TYPE_FLOAT; }
    };
    C'est pour la suite que j'ai un soucis, en effet pour les types double, ça peut être un double comme une date. J'ai essayé de faire un alias avec un typedef pour les distinguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef double TDate;
     
    template<>
    struct TO_MY_TYPE<double>
    {
        enum { Value = E_TYPE_DOUBLE; }
    };
     
    template<>
    struct TO_MY_TYPE<TDate>
    {
        enum { Value = E_TYPE_DATE; }
    };
    Je pensais que le compilateur aller faire une distinction entre TDate et double mais en fait non, il me lance une erreur indiquant que la spécialisation TO_MY_TYPE<double> existe déjà.

    Il y a un moyen propre pour distinguer les deux types ?


    Merci,

    A bientôt

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    Il y a un moyen propre pour distinguer les deux types ?
    Non, car c'est les mêmes. En effet, typedef ne défini pas un nouveau type mais crée un alias vers un type existant.

    Il faudrait passer par une solution alternative comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct TDate
    {
        double value;
    };

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    J'ai un tableau où pour positionner une valeur, on lui donne la valeur sous forme de void* et on lui indique son type par un identifiant.

    Les types de date prennent des double en fait, et il existe également le type double.
    Je me permets de te dire que je trouve ta façon d'utiliser les template très douteuse. Sans parler du void*, ou d'utiliser un double pour représenter une date.

    En fait tu veux un tableau (et pourquoi pas un std::vector d'ailleurs?) qui contienne des types différents? Tu devrais voir du côté du polymorphisme, ou de boost::any.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/02/2014, 20h12
  2. Réponses: 1
    Dernier message: 30/07/2013, 21h01
  3. Limiter les types des paramètres templates?
    Par Pragmateek dans le forum C++
    Réponses: 9
    Dernier message: 29/08/2006, 13h14
  4. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 17h03

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