2009-04-12 4 views
1

Bei Verwendung einer Containerklasse wie vector, list usw. kann der Typ der Elemente verwendet werden, indem vector<type>::value_type geschrieben wird.Verwenden von in Vorlagenargumenten definierten Typen

jedoch der folgende Code

template<class container> 
void foo(container& c) 
{ 
    typedef container::value_type elementtype; 
    elementtype b; 
}

mit dem Fehler fehlschlägt "expected initializer before ‘elementtype’". Kann man den Elementtyp ableiten, wenn der Containertyp als Template-Argument angegeben wird, oder muss ich den Elementtyp als zusätzliches Template-Argument angeben?

Antwort

12

Sie verpassen die erforderliche Typenname Stichwort:

typedef typename container::value_type elementtype; 

Dies liegt daran, container ist ein Abhängiger Name in dieser Vorlage, so dass der Compiler hat keine Möglichkeit zu wissen, ob Container :: value_type immer ein Typ oder nicht, da es von der Wahl container abhängen kann.

Sicher ist diese Frage irgendwo eine FAQ?

Bearbeiten, ist es: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18

Verwandte Themen