Lese-Methode mit unbekanntem Template-Parameter als Rückgabe
-
Hallo zusammen,
ich habe folgendes Problem und weiß nicht, ob es gelöst werden kann.
Ich habe eine Methode, die eine Binärdatei einlesen soll. Die Methode soll eine Instanz einer Template-Klasse zurückgeben, wobei der Template-Parameter unbekannt ist.
[code]template<typename T> Object<T> Read(const std::string &filename);[/code]Die Binärdatei enthält Daten des Datentyps T, sodass erst beim Einlesen der Datei festgestellt wird, was T überhaupt ist. Wie kann aber beim Aufruf der Methode und Verlassen dieser das Ergebnis einem Objekt 'Object<T>' zugewiesen werden, wenn T unbekannt ist.
Gibt es eine Möglichkeit?
Danke und Gruß,
CPPSaid
-
CPPSaid schrieb:
Gibt es eine Möglichkeit?
Nein.
Du musst Template-Parameter zur Compilezeit angeben, nicht erst zur Laufzeit, wenn du die Datei liest.Allerdings hast du vermutlich nur eine begrenzte Anzahl von Kandidaten, die der Dateileser prüft. Das wäre ggf. ein Kandidat für boost::variant.
-
CPPSaid schrieb:
Gibt es eine Möglichkeit?
Jaein,
Im Allgemeinen macht man dass so, dass die Funktion einen Zeiger auf ein Interface liefert
ObjectBase* Read(const std::string &filename);(besser noch mit Smartpointer als Returnwert; in C++11 gibt es z.B. unique_ptr)
Alle Objekt-Klassen müssen dann von
ObjectBaseabgeleitet sein.
-
Werner Salomon schrieb:
CPPSaid schrieb:
Gibt es eine Möglichkeit?
Jaein,
Im Allgemeinen macht man dass so, dass die Funktion einen Zeiger auf ein Interface liefert
ObjectBase* Read(const std::string &filename);(besser noch mit Smartpointer als Returnwert; in C++11 gibt es z.B. unique_ptr)
Alle Objekt-Klassen müssen dann von
ObjectBaseabgeleitet sein.Generell ist das keine schlechte Möglichkeit. Allerdings frage ich mich, wie dann weiter mit den Daten gearbeitet werden kann. Wenn es darauf ankommt, dass man später den Datentyp kennt, muss der ja irgendwie von
ObjectBaseabgefragt werden. Ist das nicht ziemlich umständlich?
CPPSaid