Datentyp bekommen.
-
Hallo, ich habe eine Frage und zwar gibt es eine Funktion oder irgendwelche Tricks/Systeme mit der man den Variablentyp herausbekommen kann, sei es eine eigene Zahl für int, eine andere für float usw.. oder halt iwas indem man die Variablentypen erkennen und auseinander halten kann?
z.B. ich hab eine Variable
int var1 = 0;und meine Funktion die von der Variable den Typ herausbekommt und wieder zurückliefert
funktion_die_alles_kann(var1);und ich dann zurückgeliefert bekomme -> int
Danke schon mal im voraus, hoffe ihr könnt mir helfen

-
Benutz für int, float doch Template-Spezialisierung:
template<class T> std::string isTypeof( T type ) { return std::string( "unknown" ); } template<> std::string isType( int ) { return std::string( "int" ); }Aber da gibt es bestimmt noch elegantere Lösungen.
Gruß Kimmi
-
mit typeid.
#include <iostream> #include <typeinfo> #include <string> int main() { std::string name("Hallo"); char ch='a'; int a=1; float b=1.1; std::cout << typeid(name).name() << std::endl; //Ausgabe: Ss std::cout << typeid(ch).name() << std::endl; //Ausgabe: c std::cout << typeid(a).name() << std::endl; //Ausgabe: i std::cout << typeid(b).name() << std::endl; //Ausgabe: f return 0; }gruß
syntax
-
Setzt typeid nicht RTTI enabled voraus? Ich bin mir da nicht sicher, daher die Nachfrage.
Gruß Kimmi
-
Zenter schrieb:
Hallo, ich habe eine Frage und zwar gibt es eine Funktion oder irgendwelche Tricks/Systeme mit der man den Variablentyp herausbekommen kann, sei es eine eigene Zahl für int, eine andere für float usw.. oder halt iwas indem man die Variablentypen erkennen und auseinander halten kann?
z.B. ich hab eine Variable
int var1 = 0;und meine Funktion die von der Variable den Typ herausbekommt und wieder zurückliefert
funktion_die_alles_kann(var1);und ich dann zurückgeliefert bekomme -> int
Danke schon mal im voraus, hoffe ihr könnt mir helfen

1. Das Schlüsselwort**
typeid**(das als Funktion genutzt wird) liefert zu einem Typ eineInformationsklasseKlasse zurück, die Informationen über ihn bereithält, genanntstd::type_info, die in dem gleichnamigen Header (<typeinfo>) definiert ist.std::typeinfo a = typeid(int);2. Seit C++11 gibt es das Schlüsselwort**
decltype**. Es wird als Funktion mit einem Parameter genutzt, welche im wahrsten Sinne des Wortes einen Typ ersetzt:decltype(8) a; //a ist vom Typ int (oder von dem Typ des Literals '8')Es steht für declaration type.
In diesem Zusammenhang verweise ich dich aufauto(oder automatic type deduction, C++11), dass du googlen kannst.3. Wofür zum Teufel brauchst du das? Mir schwant nichts gutes...
@kimmi: RTTI ist ein essentielles Feature von C++, und ob man das en/dis-ablen kann scheint mir höchst unwahrscheinlich...
Edit³: Die ganzen Edits sind wegen der Tags

-
Hi
danke erstmal für die Antworten, haben mir sehr geholfen.Hacker schrieb:
3. Wofür zum Teufel brauchst du das? Mir schwant nichts gutes...
Macht dir keine Sorgen, wird bloß für eine Übung benötigt und mir kam keine Idee wie ich das lösen kann deswegen auch die Frage hier
mfg Zenter
-
Zenter schrieb:
Hacker schrieb:
3. Wofür zum Teufel brauchst du das? Mir schwant nichts gutes...
...Mir kam keine Idee wie ich das lösen kann deswegen auch die Frage hier
Siehst du, nichts gutes. Zeig mal Übung + Ansatz, ich glaube du gehst das falsch an.
-
Es ist bloß ein Programm welches die Datentypen von verschiedenen Typen ermittelt und auf einer Konsole ausgibt. Ich weiß nicht wofür sowas man benutz und/oder braucht aber ich folge nur ein Buch und seine Aufgaben und versuch sie zu verstehen

-
Zenter schrieb:
[...] ein Buch und seine Aufgaben und versuch sie zu verstehen

Wie heisst das Buch und vom wem ist es?
-
Der C++ Programmierer - C++ Lernen und Professionel anwenden (2. Auflage)
Breymann, Ulrich
-
Das Buch ist recht anständig. Kannst ruhig weiter verwenden.

Und zu RTTI: RTTI ist ein feature, das enable sein muss, dass typeid überhaupt funktioniert, wobei glaub ich eh die meisten schon default-enabled sind.
gruß
syntax
-
Also bei mir ist funktioniert es einwandfrei was heißt das RTTI enable is. Bloß ich bekomme als Ausgabe keine
Syntax_error schrieb:
std::cout << typeid(name).name() << std::endl; //Ausgabe: Ss std::cout << typeid(ch).name() << std::endl; //Ausgabe: c std::cout << typeid(a).name() << std::endl; //Ausgabe: i std::cout << typeid(b).name() << std::endl; //Ausgabe: fsondern
std::cout << typeid(ch).name() << std::endl; //Ausgabe: char std::cout << typeid(a).name() << std::endl; //Ausgabe: int std::cout << typeid(b).name() << std::endl; //Ausgabe: floatd.h genau die Datentypen zurück

-
http://de.wikipedia.org/wiki/Runtime_Type_Information
Ja das kann schon sein. Ich arbeite seit neuestem mit Linux und dem GCC 4.6.3 und das stand dann an der Konsole. Kenn mich mit Ubuntu noch nicht aus, kann sein dass ich das noch irgendwo einstellen kann.

Gruß
syntax
-
Das hat nix mit dem OS zu tun sondern ist die Ausgabe des GCC.
-
Ist das nicht ein Flag? Sonst gibt es AFAIR noch eine GCC-Funktion, die Syntax_errors Rückgaben in Lesbare verwandelt.
-
Tut mir leid, ich meinte auch nicht ubuntu, sondern ich kenne mich mit dem gcc noch nicht so aus.
@Hacker
Ja ich hebe gestern aufgrund meines Unwissens recherchiert und sowas wie c++ filt gefunden. Aber habe mich noch nicht wirklich damit befasst, da der Schulstress im Weg ist.gruß
syntax
-
Mein ich doch. Ich erinnere mich an Embedded-projekte, wo RTTI explizit disabled wurde. Ob das nun wirklich Sinn macht, berwerte ich mal nicht.
Gruß Kimmi
-
kimmi schrieb:
Mein ich doch. Ich erinnere mich an Embedded-projekte, wo RTTI explizit disabled wurde. Ob das nun wirklich Sinn macht, berwerte ich mal nicht.
Gruß Kimmi
Macht es, weil RTTI im Embedded Bereich meist mehr Speicherplatz bedeutet (bei uns teilweise über 100 Kb).
Von daher...