Bonjour,
J'ai parfois vu l'utilisation d'un type enum pour stocker une valeur dans le cadre de la m�ta-programmation et je me demandais pourquoi utiliser cela plut�t qu'une constante membre statique du type de la donn�e.
Dans l'exemple ci-dessous, val_enum et val_static servent tous les deux � stocker une valeur. Le premier utilise pour cela une �num�ration tandis que l'autre utilise une constante statique. Je ne vois que deux diff�rences en pratique. D'une part, le compilateur m'affiche des avertissements lorsque je compare les valeurs �num�r�es. D'autre part, je me dis que les membres statiques peuvent �ventuellement consommer un peu de m�moire dans le programme compil�, sinon je ne pourrais y faire r�f�rence comme � la fin du main() ci-dessous.
Mes questions sont donc : dans quels cas faut-il pr�f�rer l'�num�ration � la variable membre statique*? et dans quels cas les constantes membres statiques consomment de la m�moire*?
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
45
46 #include <iostream> template<int N> struct val_enum { typedef int value_type; enum { value = N }; }; template<int N> struct val_static { typedef int value_type; static const int value = N; }; template<typename Val1, typename Val2> struct max_value { enum { value_enum = (Val1::value > Val2::value) ? Val1::value : Val2::value }; static const typename Val1::value_type value_static = (Val1::value > Val2::value) ? Val1::value : Val2::value; }; int main() { std::cout << max_value< val_enum<3>, val_enum<5> >::value_enum << std::endl; std::cout << max_value< val_static<5>, val_static<3> >::value_enum << std::endl; std::cout << max_value< val_enum<3>, val_enum<5> >::value_static << std::endl; std::cout << max_value< val_static<5>, val_static<3> >::value_static << std::endl; const int& a = val_static<1>::value; std::cout << a << std::endl; return 0; }
Partager