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 comparable, traits


Sujet :

Langage C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 90
    Points
    90
    Par défaut Classe comparable, traits
    Bonjour,

    J'aimerais savoir s'il est possible de tester l'existence de fonctions (à partir de leur signature) au sein d'une classe.

    Par exemple avec une fonction template de ce style...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename T>
    struct is_comparable {
           static const bool value = //...
    }
    ...is_comparable<MaClasse>::value, me retournerait vrai s'il existe les operateurs de comparaison : ==, <, >, <= et >=

    Merci

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Bonjour,

    La première solution est d'utiliser : http://www.boost.org/doc/libs/1_52_0...cept_check.htm

    Cependant si tu veux te pencher sur le "comment ça marche", renseignes toi sur SFINAE, c'est l'idée de base qui est derrière les éléments qui cherchent à vérifier ce qu'on peut faire sur une classe.

    L'idée simple est que si une spécialisation template échoue ce ne provoque pas une erreur mais passe sur une autre spécialisation. En assemblant correctement les spécialisations et ce qu'on cherche à tester, on peut obtenir un type qui caractérise ce qu'on veut.

    Cependant, que ce soit avec boost ou à la main, il reste souvent des imperfections dans les tests qui sont intrinsèque au langage, typiquement les visibilités des fonctions peuvent poser problèmes. Il te faudra peut-être ruser pour tester ce que tu veux.

    Pour boost, il y a peut-être déjà des classes concepts qui correspondent à tes besoins, si ce n'est pas le cas il y a une macro qui permet de tester "ce que tu veux".

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 90
    Points
    90
    Par défaut
    Merci, je vais regarder tout ça de plus près.

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

Discussions similaires

  1. Class de traits ou préprocessor ?
    Par jblecanard dans le forum C++
    Réponses: 7
    Dernier message: 03/01/2011, 11h08
  2. Réponses: 2
    Dernier message: 26/11/2010, 00h10
  3. Probleme avec une class qui traite la date
    Par tarikmahf dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 10/11/2008, 22h12
  4. classe de trait
    Par poukill dans le forum C++
    Réponses: 4
    Dernier message: 21/08/2007, 15h40
  5. classe de traits et conteneurs
    Par koopajah dans le forum C++
    Réponses: 6
    Dernier message: 02/02/2005, 10h58

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