Template mit Typprüfung



  • Hi, also ich möchte ein Template schreiben, welches ein array in eine Datei schreibt,
    bzw. ausliest. Nun frage ich mich wie ich innerhalb des Template irgendwie
    den Typ prüfen kann, den das array als Datentyp zugewiesen bekommen hat,
    um darauf zu reagieren.

    Devil



  • wieso nimmst du ein template, wenn du dann doch den typ willst um wahrscheinlich je nach typ unterschiedlich zu reagieren.



  • Hi

    Das ist eigentlich so simpel das du dir wahrscheinlich an den Kopf langen wirst!
    Hier ein Beispiel:

    template<typename U>class TestMyType
      {
         public:
               TestMyType(){}
              ~TestMyType(){}
         void  TellMeMyType()
               {
                if      (typeid(U) == typeid(int)) cout << "int" << endl;
                else if (typeid(U) == typeid(char)) cout << "char" << endl;
                else if (typeid(U) == typeid(float)) cout << "float" << endl;
                else cout << "Typ ist mir noch nicht vorgestellt worden!" << endl;
               }
      };
    

    Siehst du !

    Möge der Code mit dir sein 😉

    [ Dieser Beitrag wurde am 13.06.2003 um 17:57 Uhr von evil2002 editiert. ]



  • Wäre es nicht einfacher für alle vorgestellten Typen einen operator<< zur verfügung zu stellen bzw. davon auszugehen das die Datentypen einen op<< besitzen ?

    Dann wäre der Typ im template wieder egal.



  • Original erstellt von evil2002:
    **```cpp
    template<typename U>class TestMyType
    {
    public:
    TestMyType(){}
    ~TestMyType(){}
    void TellMeMyType()
    {
    if (typeid(U) == typeid(int)) cout << "int" << endl;
    else if (typeid(U) == typeid(char)) cout << "char" << endl;
    else if (typeid(U) == typeid(float)) cout << "float" << endl;
    else cout << "Typ ist mir noch nicht vorgestellt worden!" << endl;
    }
    };

    sobald man so etwas schreibt, sollte man sich ueberlegen ob das wirklich noetig ist. denn es gibt eigentlich nicht viele situationen wo man darum nicht herum kommt...



  • @ShadeOfMine

    Ich habe ihm eigentlich nur gezeigt wie er es machen kann !

    Er muss ja nicht!

    C U 🕶



  • Der Vollständigkeit halber sollten wir vielleicht noch die Möglichkeit der Spezialisierung erwähnen, d.h. man kann für bestimmte Typen eine spezielle Implementation des Templates schreiben.

    Damit könnte man die eigentliche Speicherung für jeden Typ anders realisieren. Die technische Vorgehensweise ist in diesem Buchkapitel aus meinem Buch dargestellt (auf den ersten 5 Seiten):
    http://www.mitp.de/imperia/md/content/vmi/29842/1.pdf

    Ich würde allerdings im vorliegenden Fall auch zu Knuddlbaers Vorschlag greifen. Wie in dem Kapitel angemerkt wird, ist Spezialisierung eine Abkehr von der Generalisierung, insofern läuft das dem Template-Gedanken zuwieder. Aber paßt thematisch gut zu evil2002s erstem Beitrag... ist quasi die statische Variante (Compilezeitvariante) zu seiner Idee.


Anmelden zum Antworten