Me pregunto cuál es la diferencia entre usar un const estático y un enum cuando se utilizan técnicas de metaprogramación de plantillas.Metaprogramación de la plantilla: diferencia entre utilizar Enum Hack y Static Const
EX: (Fibonacci través TMP)
template< int n > struct TMPFib {
static const int val =
TMPFib< n-1 >::val + TMPFib< n-2 >::val;
};
template<> struct TMPFib<1> {
static const int val = 1;
};
template<> struct TMPFib<0> {
static const int val = 0;
};
vs
template< int n > struct TMPFib {
enum {
val = TMPFib< n-1 >::val + TMPFib< n-2 >::val
};
};
template<> struct TMPFib<1> {
enum { val = 1 };
};
template<> struct TMPFib<0> {
enum { val = 0 };
};
Por qué utilizar uno sobre el otro? He leído que el enum hack se usó antes de que la static const fuera admitida dentro de las clases, pero ¿para qué usarlo ahora?
+1: una gran pregunta de hecho, y también me gustaría ver cuáles serán las respuestas, excepto por lo obvio. –
const estático permite tipos distintos de int. doble por ejemplo. –