Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datentyp feststellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.03.2008, 10:37 Uhr
gipfelstuermer



Hallo,
ich such eine Funktion, die bei Angabe eines Paramters, den Typ dieses Parameters zurückgibt.
Also z.B.

C++:
String a="asrdas";

cout <<"Die Variable a ist vom Typ "<<getTyp(a);
//Die Variable a ist vom Typ String




Gibt es sowas?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.03.2008, 11:00 Uhr
Kest
saint


Hi!

C++ unterstützt >Überladen von Funktionen<. Also kannste selber so etwas machen:

C++:
#include <iostream>
#include <string>

std::string getTyp(signed char){ return "signed char"; }
std::string getTyp(std::string){ return "std::string"; }
//.....


int main()
{
    signed char a;
    std::string s;

    std::cout << getTyp(a) << std::endl;
    std::cout << getTyp(s) << std::endl;
}


--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.03.2008, 11:04 Uhr
gipfelstuermer



Mit anderen Worten: Es gibt keine solche Funktion.
Ich muss es selber Prorgammieren, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.03.2008, 11:06 Uhr
Pler
Einer von Vielen
(Operator)


Wozu brauchst du es denn?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.03.2008, 11:09 Uhr
gipfelstuermer



Für ein Funktionstemplate.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.03.2008, 11:40 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Mit nem dynamic cast kann man prinzipiell den datentyp abfragen bzw erfragen ob es sich um einen Datentypen x handelt
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.03.2008, 12:20 Uhr
stephanw
localhorst



Zitat von gipfelstuermer:
Für ein Funktionstemplate.

Kannst Du präzisieren, was Du eigentlich machen möchtest ? Vielleicht kann man das ja auch anders lösen.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.03.2008, 14:05 Uhr
0xdeadbeef
Gott
(Operator)


Es gibt im Header typeinfo ein paar entsprechende Funktionen. Die machen zwar nicht genau das, was du willst (die Details sind implementierungsspezifisch), aber zumindest etwas in der Art. Beachte dabei, dass für polymorphische Typen eine virtuelle Funktionstabelle gegeben sein muss (Das ist prinzipiell schon dadurch gegeben, dass polymorphische Typen einen virtuellen Destruktor haben müssen, aber noch mal zur Erinnerung). Zum Beispiel:

C++:
#include <typeinfo>
#include <iostream>

struct A { virtual ~A() { } };
struct B : A { };

struct C { };
struct D : C { };

int main() {
  B b;
  A &a = b;

  D d;
  C &c = d;

  std::cout << typeid(a).name() << std::endl
            << typeid(b).name() << std::endl
            << typeid(c).name() << std::endl
            << typeid(d).name() << std::endl;
}


Gibt mit g++ 4.2.3 folgendes aus:

Code:
1B
1B
1C
1D


Was type_info::name() genau zurückgibt, ist, wie gesagt, implementierungsspezifisch, bezeichnet den Typ aber eindeutig.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 13.03.2008 um 14:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.03.2008, 16:00 Uhr
gipfelstuermer




Zitat von Windalf:
Mit nem dynamic cast kann man prinzipiell den datentyp abfragen bzw erfragen ob es sich um einen Datentypen x handelt

Ich soll eine Funktionstemplate programmieren, dass zwei Parameter bekommt. Diese 2 Parameter werden, abhängig von ihrem Datentyp in einer switch-Anweisung bearbeitet.
Habe eine bisschen in C++-Büchern gestöbert. Die Antwort ist typeid(Name der Variablen).name(). Sie gibt anscheinend den Datantyp als String zurück.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.03.2008, 16:12 Uhr
0xdeadbeef
Gott
(Operator)


Uh...was soll das mit einer switch-Anweisung? Warum spezialisierst du die Funktionsvorlage nicht einfach für spezielle Typen? Zum Beispiel

C++:
#include <iostream>

template<typename t> void foo(t) {
  std::cout << "Normalfall." << std::endl;
}

template<> void foo(int) {
  std::cout << "Spezialisierung." << std::endl;
}

int main() {
  foo(2);   // gibt aus: Spezialisierung.
  foo(3.0); // gibt aus: Normalfall
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 13.03.2008 um 16:19 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: