2015-07-10 11 views
5

È possibile inoltrare una classe interna del modello all'interno di una classe normale e utilizzare il tipo definito come qualsiasi altro tipo di inoltro dichiarato.Dichiarazione di inoltro della classe template nidificata all'interno della classe modello

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

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

Ora, se esterno è di per sé una classe template, c'è un modo per ottenere la dichiarazione di interno al di fuori della dichiarazione di esterno? Qualcosa di simile:

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 {}; 

Esiste una sintassi corretta per dichiarare Outer con i giusti parametri del modello?

risposta

7

Provate il seguente

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

Secondo l'++ standard C (14.5.2 modelli Member)

1 Un modello può essere dichiarata all'interno di un modello di classe o di classe; tale modello è chiamato modello membro. È possibile definire un modello membro all'interno o all'esterno della definizione della classe o della definizione del modello di classe. Un modello membro di un modello di classe definito all'esterno della definizione del modello di classe deve essere specificato con i parametri del modello del modello di classe seguito dai parametri del modello del modello membro.

+0

Oh dio, era così ovvio ... Grazie per la risposta :) – Louen

+1

@Louen Siete i benvenuti. :) –

Problemi correlati