PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datentypenerkennung



Berufspenner
11-12-2005, 18:27
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.

#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

panzi
11-12-2005, 19:12
dazu brauchst denk ich rtti. googel mal danach.

http://www.math.uni-wuppertal.de/~axel/skripte/oop/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.

peschmae
11-12-2005, 20:24
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ä

Joghurt
12-12-2005, 00:22
#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.