Frage zur Typprüfung bei Template Klassen
-
Hallo, ist es möglich bei einer Templateklasse zu prüfen, welcher Typ bei einem Objekt verwendet wird?
Sinn des Ganzen ist es, in einer selbst geschriebenen Klasse zur Vektorrechnung die Funktion "Vektor kürzen" anzubieten. Da das Kürzen aber nur bei ganzzahligen Typen Sinn macht, wollte ich vorher prüfen, ob es sich halt um einen solchen Typ handelt
Beispiel:template <typename T> class Vektor { //... public: void kuerzen() { if(T==int) //geht so natürlich nicht //... } };
-
boost::type_traits bietet genau das was du suchst.
-
Mit dem Standard gehts also nicht? Habe mich noch nie mit der Boost Library beschäftigt
-
Mtrx schrieb:
Mit dem Standard gehts also nicht? Habe mich noch nie mit der Boost Library beschäftigt
Klar geht es, nur musst du es dann selber schreiben - und das ist je nachdem wie komplex du es haben willst, kompliziert

Ein einfaches is_same template um festzustellen ob 2 typen identisch sind, wuerde etwa so aussehen:
template<typename T, typename U> struct is_same { enum { value = 0 }; }; template<typename T> struct is_same<T,T> { enum { value = 1 }; };und kann dann ueber
is_same<int, char>::value
angesprochen werden.aber boost erleichtert es dir halt enom, da du zB einfach
boost::type_traits<T>::is_integral
sagen kannst und du bekommst true oder false, je nachdem ob T ein integraler (ganzzahl) typ ist oder nicht.