Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Datentypenerkennung

  1. #1
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567

    Datentypenerkennung

    Hi

    Ich möchte gerne eine Funktion schreiben, die als Argument einen typenspeziefischen "Wert" bekommt und anhand diesen Argumentes, soll sie dann ermitteln, um welchen Datentypen es sich handelt. Mein Ansatz war es jetzt, einfach eine Templatefunktion zu schreiben.
    Code:
    #include<iostream>
    using namespace std;
    
    template<class T>
    void typ(T)
    {
            cout << "Es handelt sich um den Typen" << T << endl;
    }
    
    int main()
    {
        typ(true);
        typ(2+5);
        typ('a');
        
        return 0;
    }
    Leider spuckt er mir dann zu Zeile 7 folgenden Fehler aus
    expected primary-expression before ';' token
    Ich denke auch, dass mein Ansatz recht "simpel" und vielleicht zu simpel gedacht ist. Ich wüsste jetzt aber nicht direkt, wie ich das Problem sonst angehen sollte. Hat vielleicht jemand einen Tipp für mich?

    Danke schon mal
    C und C++

  2. #2
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    dazu brauchst denk ich rtti. googel mal danach.

    http://www.math.uni-wuppertal.de/~ax...p/oop17_8.html
    Ein Ausdruck der Form typeid( object) bzw. typeid( typename) ist vom Typ type_info&. Diese Klasse ist in der Header-Datei typeinfo definiert. Für jeden Typ wird ein Objekt dieser Klasse kreiert und initialisiert. Mögliche Operationen damit sind Vergleiche mit == und !=, sowie das Zurückliefern des "Namens" des Typs (mit const char *type_info::name() const). Das Format dieses Namens ist allerdings compilerabhängig.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Damit das gehen würde
    cout << "Es handelt sich um den Typen" << T << endl;
    müsstest du nen passenden Operator schreiben. Für jeden Typen.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Code:
    #include <typeinfo>
    
    template<typename T> // oder class T, ist identisch
    void typ(T t)
    { std::cout << "Typ ist " << typeid(T).name() << std::endl; }
    Ist aber wie gesagt compilerabhängig. Bei gcc wird ein Integer z.B. als "i", ein char* (string) als "PKc" bezeichnet.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •