Templateparameter erfahren ?
-
template<typename T> class Container { public: typedef T value_type; // ... };
Wenn ich jetzt also value_type benutzen möchte, müsste ich
ja folgendes schreiben.Container<value_type>::value_type instance;
Aber um ihn zu erfahren muss ich ihn ja angeben ..
Gäbe es da irgend ne andere Möglichkeit ?
schonmal danke
-
Eigentlich ist die Sache eher so gedacht, dass du nachher in irgendwelchen template-Funktionen hinkommst. Zum Beispiel:
template <typename container_t> void do_something(const container_t &ct) { container_t::value_type x = *ct.begin(); //... }
-
Is mir klar, dass es nicht für sowas gedacht war,
aber ich würd gerne wissen obs überhaupt ne Lösung
für mein Problem gibt.
-
Ich versteh nicht ganz, was das Problem ist. value_type ist ja erst definiert, wenn T definiert ist, also wenn die Template-Klasse Container konkretisiert wurde.
-
Tankian schrieb:
Wenn ich jetzt also value_type benutzen möchte, müsste ich
ja folgendes schreiben.Container<value_type>::value_type instance;
Müßte eher beispielsweise so heißen, oder?
Container<int>::value_type instance;
Und da value_type vom Typ T ist, wär's in diesem Falle int.
edit
Oder geht's dir nur darum, den in deiner Template-Klasse definierten Typ als Template-Parameter derselben Klasse zu verwenden?
-
0xdeadbeef schrieb:
Eigentlich ist die Sache eher so gedacht, dass du nachher in irgendwelchen template-Funktionen hinkommst. Zum Beispiel:
template <typename container_t> void do_something(const container_t &ct) { container_t::value_type x = *ct.begin(); //... }
fehlt da nicht ein typename?
-
Naja ich habe mir so etwas erhofft, wie wenn man über ne Instanz
auf dessen Template Parameter zugreifen kann, aber das is ja ned möglich :fKonnte es aber glücklicherweise komplett anders lösen.
greetz
-
@kingruedi: Autsch, ja. Du hast natürlich recht...
Wie war das eigentlich noch mal genau?
template <typename t> struct foo : public typename t { typedef typename t type; typename t bar; type baz; typename t qux(typename t); type quux(type); }
...oder?
-
typename brauchst du ja nur, wenn du auf Variablen/Klassen Definitionen innerhalb eines Templates zugreifen willst, also
template<class Container_t> void foo() { typename Container_t::value_type value; //... }
-
Tankian schrieb:
Naja ich habe mir so etwas erhofft, wie wenn man über ne Instanz
auf dessen Template Parameter zugreifen kann, aber das is ja ned möglich :fKonnte es aber glücklicherweise komplett anders lösen.
greetz
Wenn du eine Instance hast kannst du nur noch mit typeof den type zurückkriegen. Ist allerdings eine GCC Erweiterung.
Also folgendes geht:
int a; typeof(a) b;
-
(typeof wird aber in den neuen C++ Standard (C++0x) integriert)