Je souhaiterai avoir une confirmation.
Ne peut t on pas definir una macro permettant de comparer ( lien filiale) entre 2 classes (templates)?
Version imprimable
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 ?
Voici ce que j 'ai fabriqué de manière peut invasive et par l utilisation de macro
Code:
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:
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:
1
2
3
4
5
6 template< int n=2> struct C { REF(t) int F () {return -n;} };
Accessoirement, c'est intrusif 8O
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)