Template Typ zur Laufzeit bestimmen

thefifo

Grünschnabel
Hallo!

Ich habe ein Struct, das ein Template enthält. Von diesen Struct speichere ich einige Instanzen binär in eine Datei. In diese Datei soll auch ein Header, der angbit, welcher Datentyp das Struct enthält. Also welcher Datentyp der Template hat.

Kann ich irgendwie, aus meinem Template "V" (enthält primitive Datentypen wie bool, double, int) herausfinden, welchen Typ dieses T hat?

Code:
template <class V>
struct Storage
{

	...;

	V Value_;

};

Wie kann ich herausfinden, von welchem Datentyp das Struct-Template erstellt wurde? Gibt es eine möglichkeit?

mfg
 
Hi.

Dafür gibt's RTTI (Runtime Type Information).
C++:
#include <typeinfo>

using namespace std;
...

Storage<int> si;
Storage<double> sd;

cout << typeid(si).name() << endl;
cout << typeid(sd.Value_).name() << endl;

if (typeid(si.Value_) == typeid(int)) {
  ...
}
Gruß
 
Danke für die schnelle Antwort. Funktioniert soweit ganz gut.

Habe jetzt eine weitere Frage:

Gibt es eine Möglichkeit, wenn ich die type_info, die typeid zurückliefert aus der Datei wieder auslese, davon direkt wieder ein Storage zu erstellen?

Code:
...
file.read(reinterpret_cast<char *>(header),headersize);

Storage<header->storagetype> storage;
...

Ich hoffe man versteht was ich meine.
Wie könnte man das machen ohne unschöne if-zweige?

mfg
 
Zurück