Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Langage
Langage Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/12/2012, 17h33   #1
Awakening
Membre du Club
 
Inscription : septembre 2010
Messages : 67
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 67
Points : 61
Points : 61
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
Awakening est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 19h34   #2
Flob90
Modérateur
 
Avatar de Flob90
 
Homme Florian Blanchet
Etudiant en Optique
Inscription : août 2004
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Florian Blanchet
Âge : 22
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Etudiant en Optique

Informations forums :
Inscription : août 2004
Messages : 1 116
Points : 2 578
Points : 2 578
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)
Flob90 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 21/12/2012, 09h27   #3
Awakening
Membre du Club
 
Inscription : septembre 2010
Messages : 67
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 67
Points : 61
Points : 61
Merci, je vais regarder tout ça de plus près.
Awakening est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h07.


 
 
 
 
Partenaires

Hébergement Web