Abhängige Typen benötigen normalerweise typename
, um dem Compiler mitzuteilen, dass das Element ein Typ ist, keine Funktion oder Variable.Warum benötigt das Wort 'typedef' für abhängige Typen 'typename'?
Dies ist jedoch nicht immer der Fall.
Zum Beispiel ist eine Basisklasse nicht dies erfordern, weil es immer nur ein Typ sein kann:
template<class T> struct identity { typedef T type; }
template<class T> class Vector : identity<vector<T> >::type { }; // no typename
Nun warum typedef
je typename
nachdem es erfordert?
template<class T> class Vector
{
typedef typename /* <-- why do we need this? */ vector<T>::iterator iterator;
};
Warum nicht die gleiche Frage über z.B. 'statisch'? –
@ n.m .: Ooh Entschuldigung, ich habe es jetzt verstanden. Ja, ich habe nicht daran gedacht, obwohl ich denke, dass es wegen implicitly-int-by-default sein könnte ... also 'static x;' wäre standardmäßig 'int', oder? (Oder zumindest wäre es in C?) Aber ehrlich gesagt nicht sicher, das ist eine gute Frage. – Mehrdad
C ist implizit int vor etwa 15 Jahren auch gefallen :) – hvd