C++-manual
Förutgående | Kapitel 26. Typinformation | Nästa

# Typinformation

Man kan även få information från en datatyp om vilken typ det är frågan om. I normala fall vet man vilken datatyp det är då det är frågan om primitiva datatyper, men vid arvshierarkier och med pekare till basklasser kan man inte alltid vara säker. Man kan i sådana fall använda sig av t.ex. någon inbyggd metod eller så `dynamic_cast` för att försöka konvertera objektet till någon viss klass. Ett alternativt sätt är att använda en annan ny finess hos C++, man kan nämligen få ut en id för varje objekt som säger vilken datatyp det är frågan om. Denna id kan användas för att jämföra om två objekt är av samma typ. Funktionen som ger informationen heter `typeid()` och returnerar en referens till en klass `const type_info`. Denna funktion kan användas efter att headerfilen `<typeinfo>` inkluderats. Ett exempel på hur `typeinfo()` kan användas:

    #include <typeinfo>

    void foobar (A * Data) {
      // hämta information om 'Data'
      const type_info & Info = typeid ( *Data );
      cout << "Typen = " << Info.name () << endl;
    }

Vi måste ha en referens till en `type_info` för returvärdet från `typeid()`. Notera att funktionen returnerar typen på dess parameter, så skickar vi t.ex. en pekare får vi ut som information att det är en pekare till någon datatyp, därför avrefereras `Data` innan den skickas som parameter. Klassen `type_info` har överlagrade operatorer (se Kapitel 21) som tillåter jämförelse (`==` och `!=`) mellan olika instanser av `type_info`. En metod `name()` finns tillgänglig ifall man vill använda en strängrepresentation av datatypen till något, t.ex. till en `map` över olika klasser.

Förutgående | Hem | Nästa
Hur används typkonvertering | Upp | Missbruk av typinformation