Je souhaiterai avoir une confirmation.
Ne peut t on pas definir una macro permettant de comparer ( lien filiale) entre 2 classes (templates)?
Je souhaiterai avoir une confirmation.
Ne peut t on pas definir una macro permettant de comparer ( lien filiale) entre 2 classes (templates)?
Bah tu as un template. L'information est disponible à la compilation.
Quel est le problème ?
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Voici ce que j 'ai fabriqué de manière peut invasive et par l utilisation de macro
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 # define REF typedef int Type; # define LABEL(CLASS_T) void G ( typename CLASS_T::Type); template< int n=2> struct C { int F () {return -n;} }; template< int n=2> struct A { REF; int F () {return n;} }; template< int n=2> struct B:public A<n>{ int F () {return n+1;} }; template< class T> struct H { LABEL(T); int h () { T a; return a.F();} }; int main() { H<A<> > u_a; H<B<> > u_b; H<C<> > u_c; int a = u_a.h(); int b = u_b.h(); int c = u_c.h(); return 0; }
J'ai utilise le document sur le Sfinae que je ne connaissais pas
Un toute petite amelioration qui permet de relier individuellement la classe template et son argument
Qu 'en pensez vous?
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 # define REF(Type) typedef int Type; # define LABEL(CLASS_T,Type) void G ( typename CLASS_T::Type); template< int n=2> struct C { int F () {return -n;} }; template< int n=2> struct A { REF(t); int F () {return n;} }; template< int n=2> struct B:public A<n>{ int F () {return n+1;} }; template< class T> struct H { LABEL(T,t); int h () { T a; return a.F();} }; int main() { H<A<> > u_a; H<B<> > u_b; H<C<> > u_c; int a = u_a.h(); int b = u_b.h(); int c = u_c.h(); return 0; }
Salut,
(ton chef a rien compris aux template de la discussion précédent et demande une autre solution ?)
Le système que tu proposes ne détermine plus un lien entre 2 classes mais d'une certaine façon impose un pré-requis de la classe T. Il suffit de faire :
pour que ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template< int n=2> struct C { REF(t) int F () {return -n;} };
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Accessoirement, c'est intrusif
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Et pire c'est une macro... du coup le gars qu'arrive derrière, il va se demander wtf le REF() dans la classe... (vu que y'a pas type explicitement)
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager