Edit: ma question ne reflétait pas le vrai problème qui est : Quels sont les différentes manières de remplacer :
par un code dont le branchement est calculé à la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (condition qui peut être calculé statiquement) { foo(); } else { bar(); }
Message initial :
Salut,
je m'initie à la programmation générique et j'aimerais simplement afficher le min et le max d'un type.
Je dois faire une spécialisation pour les char pour que la valeur affichée soit en int.
J'ai essayé de faire ceci :
mais je ne suis pas arrivé pas à écrire la fonction do_print_min_max.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template <class T> void print_min_max() { do_print_min_max<T, sizeof(T) == 1>(); }
J'ai donc essayé autrement et je suis arrivé au code correct suivant :
Par contre, est-ce qu'il possible de simplifier ce code en utilisant boost traits ou mpl ?
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 template <class T, bool need_cast> struct cast; template <class T> struct cast<T, true> { typedef int type; }; template <class T> struct cast<T, false> { typedef T type; }; template <class T> struct cast_helper { typedef typename cast<T, sizeof(T) == 1>::type type; }; template <class T> void print_min_max() { typedef typename cast_helper<T>::type type; std::cout << typeid(T).name() << " : min = " << static_cast<type>(std::numeric_limits<T>::min()) << ", max = " << static_cast<type>(std::numeric_limits<T>::max()) << std::endl; }
En outre, je serais très intéressé de savoir s'il est possible d'écrire la fonction (ou peut-être une classe) do_print_min_max.
Merci.
Partager