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.


Anmelden zum Antworten