Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre du Club
    Inscrit en
    septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 73
    Points : 62
    Points
    62

    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 :
    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
    Expert Confirmé Avatar de Flob90
    Homme Profil pro Florian Blanchet
    Etudiant en Optique
    Inscrit en
    août 2004
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Nom : Homme Florian Blanchet
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Etudiant en Optique

    Informations forums :
    Inscription : août 2004
    Messages : 1 219
    Points : 2 517
    Points
    2 517

    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".
    "We can solve any problem by introducing an extra level of indirection" Butler Lampson

    "N'importe quel problème peut être résolu en introduisant un niveau d'indirection supplémentaire" Butler Lampson (traduction libre)

  3. #3
    Membre du Club
    Inscrit en
    septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 73
    Points : 62
    Points
    62

    Par défaut

    Merci, je vais regarder tout ça de plus près.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •