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 :f

    Konnte 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 :f

    Konnte 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)


Log in to reply