Template verwenden in typedef bzw. std::pair ?
-
Hallo,
Ich würde gerne wissen ob es blödsinn ist templates in typedefinitions zu verwenden. Geht das nicht? Mein Compiler schreit mit "T was not declared in this scope".Ich verwende das Ding so:
typedef std::pair< Key, HASH_DATA<T> > Hash_Pair;
-
wobei HASH_DATA eine templatebasiertes struct ist.
Danke euch
-
Blödsinn ist es sicher nicht, aber mit der gegenwärtigen Sprachdefinition nicht möglich. Die beste Näherung erreichst du durch verschachtelte typedefs
template<typename T> struct Hash_Pair { typedef std::pair< Key, HASH_DATA<T> > type; };Hash_Pair<T> ist dann nicht selbst das gesuchte Paar, sondern Hash_Pair<T>::type.
Im nächsten Standard wird es Template-Aliase geben, allerdings mit einer anderen Syntax.
-
ah ok - danke für den hinweis. Sehr interessant

-
Im Moment kannst du es nur so wie camper schreibt machen, oder einen anderen häufig genutzten Workaround verwenden, nämlich ableiten:
template<typename T> struct Hash_Pair : std::pair< Key, HASH_DATA<T> > { };Wenn der Typ genau std::pair< Key, HASH_DATA<T> > entsprechen muss bleibt nur campers Variante, sonst geht ableiten auch oft.