error C2252: 'Value' : Nur Funktionen koennen rein virtuell deklariert werden
-
bekommt beim VC6 den obigen fehler bei folgendem code... der code funktioniert beim borland compiler und mit dem gcc auch. nur VC6 tut sich schwer...
template <typename T> struct IsVoid { static const bool Value = false; }; template <> struct IsVoid<void> { static const bool Value = true; };
-
Nicht jeder Compiler unterstützt die Vorbelegung von Klassenelementen. D.h. du müsstest die Werte bei der Definition der Variablen bereitstellen:
template<typename T> struct isVoid { static const bool Value; }; template<typename T> const bool isVoid<T>::Value = false; template<> struct isVoid<void> { static const bool Value; }; const bool isVoid<void>::Value = true;
Alternativ könntest du auch einen passenden enum bereitstellen:
template<typename T> struct isVoid { enum{Value=false}; };
-
hm... mit dem enum funktioniert es... gibt es irgendwelche unterschiede zwischen den beiden versionen, d.h. ist eine von beiden zu bevorzugen?
-
Die Variante mit dem static bool erzeugt eine eigenständige Variable - da kannst du auch die Adresse ermitteln und weitergeben, wenn du willst (das kann auch von Nachteil sein - Stichwort ODR).
Die enum-Version erzeugt einen anonymen enum-Typ mit einem Wert (sprich: das Ding hat keine Adresse, aber kann auch problemlos doppelt definiert werden (wenn du z.B. deine "isvoid.h" in mehrere Übersetzungseinheiten packst).(im praktischen Einsatz dürfte es wohl kaum einen großen Unterschied machen)