Zastanawiam się, jaka jest różnica między używaniem statycznej stałej i wyłudzającym hack przy użyciu metaprogramowania szablonów.Szablon Metaprogramming - Różnica między używaniem Enuma Hack a statycznym Const
EX: (Fibonacciego przez 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 };
};
Dlaczego używać jednego nad drugim? Czytałem, że hack wyłudzeniowy był używany przed statycznym const był obsługiwany w klasach, ale dlaczego teraz go używać?
+1: naprawdę ważne pytanie, a ja chciałbym zobaczyć, jakie będą odpowiedzi, z wyjątkiem oczywistych. –
static const pozwala na typy inne niż int. podwójne na przykład. –