lokale Template Klassen nicht möglich ?
-
void f() { class Local { // is ja bekanntlicherweise, möglich // ... }; } void g() { template<typename T> // error: syntax error before `template' class Local { // ... }; }
Würd mich also interessieren, obs einen speziellen Grund gibt, warum
lokale Template Klassen anscheinend nicht erlaubt sind.
-
Es soll so sein und gibt den Compiler Herstellern mehr Möglichkeiten templates zu implementieren. Dec/Compaq C++ z.B. implementiert templates, in dem jede Funktion in eine seperate Objektdatei geschrieben wird. Für das spätere Linken müssen diese Funktionen dann externe Bindung haben.
-
falsche antwort:
Hab jetzt die letzten Tage versucht den Beitrag von
dir mal zu verstehen, is mir aber nicht gelungen :f
Wär dir also sehr verbunden, wenn du das nochmal etwas
ausführlicher erklärst. Danke.Ich versteh nicht, wieso es in dem Code für Compiler Probleme geben
sollte. Es ist ja immerhin ne ganz normale Template-Klasse, die halt
lokal bleibt und somit eh nur in derjenigen Funktion instanziiert
werden kann.
-
der Standard sagt in Abschnitt 14§2: «A template-declaration can appear only as a namespace scope or class scope declaration.» Jetzt kennst du zwar das Warum immer noch nicht, aber vielleicht hilft es trotzdem
-
Hm, kanns sein, dass da noch Aussnahmen dabei stehen ? (Hab leider keinen Standard)
So klappts nämlich auch nicht ..void h() { class Local { public: template<typename T> // hier ist doch ein class scope, class Inner { // trotzdem nicht erlaubt // ... }; }; Local::Inner<int> a; // ... }
-
14.5.2§2: «A local class shall not have member templates.»