2015-07-10 17 views
5

Sie können eine innere Template-Klasse innerhalb einer normalen Klasse deklarieren und den definierten Typ als jeden anderen deklarierten Typ verwenden.Forward-Deklaration der Vorlagenklasse innerhalb der Vorlagenklasse

Wenn nun Outer selbst eine Vorlagenklasse ist, gibt es eine Möglichkeit, die Deklaration von Inner außerhalb der Äußerung von Outer zu halten? Etwas wie:

template<typename T> 
class Outer { 
    template <int N> class Inner; 
    typedef Inner<0> Inner0; 
    Inner0* f(); 
}; 

template<typename T, int N> //This won't work 
class Outer<T>::Inner {}; 

Gibt es eine korrekte Syntax, um Outer mit den richtigen Vorlagenparametern zu deklarieren?

Antwort

7

Versuchen Sie, die folgende

template<typename T> 
template <int N> 
class Outer<T>::Inner {}; 

Nach dem C++ Standard (14.5.2 Mitglied Vorlagen)

1 Eine Vorlage kann innerhalb einer Klasse oder Klassenvorlage deklariert werden; Eine solche Vorlage wird als Mitgliedervorlage bezeichnet. Eine Mitgliedervorlage kann innerhalb oder außerhalb ihrer Klassendefinitions- oder Klassenschablonendefinition definiert werden. Eine Member-Vorlage einer Klassenvorlage, die außerhalb ihrer Klassenschablonendefinition definiert ist, wird mit den Template-Parametern der Klassenvorlage gefolgt von den Template-Parametern der Member-Vorlage angegeben.

+0

Oh Gott, es war so offensichtlich ... Danke für die Antwort :) – Louen

+1

@Louen Sie sind willkommen. :) –

Verwandte Themen