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 :

Traits pour classes définissant un typedef


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut Traits pour classes définissant un typedef
    Bonjour à tous,

    En attendant les concepts de C++0x, j'ai besoin d'écrire des classes de traits à utiliser avec boost::enable_if.

    J'ai un ensemble de classes ayant pour point commun de définir un typedef tail_sequence_node_t. J'aimerais écrire une classe de traits permettant de savoir si le type donné fait partie de cet ensemble de classes.
    Cette première tentative infructueuse me renvoie un message d'erreur à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<class T>
    struct is_sequence_node
    {
    	static const bool value = false;
    };
     
    template<class T>
    struct is_sequence_node<typename T::tail_sequence_node_t>
    {
    	static const bool value = true;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur: paramètres du patron ne sont pas utilisés dans la spécialisation partielle: 'T'
    Que faire ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  2. #2
    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
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class T>
    struct is_sequence_node
    {
    	static const bool value = (sizeof(typename T::tail_sequence_node_t) > 0 ) ? true : false;
    };
    Le problème ici c'est que ça compilera pas si y'a pas de type tail_sequence_node_t.

    Mais problème intéressant, je vais y réfléchir

  3. #3
    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
    Si tu peux utiliser Boost.MPL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOST_MPL_HAS_XXX_TRAITS_DEF(tail_sequence_node_t)
    template <typename T>
    struct is_sequence_node
    {
      static const bool value = has_tail_sequence_node_t<T>::value;
    };
    devrait marcher

    EDIT : en gros, utiliser has_tail_sequence_node_t<T> directement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/04/2013, 12h07
  2. Réponses: 14
    Dernier message: 26/01/2011, 22h18
  3. Réponses: 1
    Dernier message: 12/11/2007, 13h36
  4. chemin d'acces pour classe
    Par DEVfan dans le forum C++
    Réponses: 3
    Dernier message: 16/08/2007, 08h31
  5. [états]Un trait pour séparer les clients
    Par jawed dans le forum IHM
    Réponses: 7
    Dernier message: 18/03/2007, 22h27

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