double als konstanter Template-parameter
-
template <typename T, T top> class X{}
funktioniert nicht, da:
X<double, 1.0> x;
double’ is not a valid type for a template constant parameter
C++ - standard:
A non-type template-parameter shall not be declared to have floating
point, class, or void type. [Example:
template<double d> class X; // error
template<double* pd> class Y; // OK
template<double& rd> class Z; // OK
—end example]Kann mann daraus etwas basteln so dass es trotzdem mit dopuble geht?
template <typename T, T* top> class X{} double* d = new double(1.0); X<double, d> x;
fuehrt zu
is not a valid template argument for type ‘double*’ because it is not a constant pointerWie gehts richtig?
-
Probier mal:
template <typename T, const T* top> class X{} static const double d = 1.0; X<double, &d> x;
edit: const eingefügt (wenn nur lesend auf d zugegriffen wird), ansonsten kannst du bei beiden das const wieder entfernen.
-
In Kurzfassung: Die Template-Paramter muß der Compiler bereits zur Compile-Zeit auflösen. Deshalb kannst du dort keine double-Werte (die werden erst zur Laufzeit von der FPU erzeugt) oder dynamisch angelegte Zeiger übergeben (new holt sich auch erst zur Laufzeit seinen Speicher).
-
Thx.