2015-07-10 20 views
5

Możesz przesłać dalej deklarację wewnętrznej klasy szablonu wewnątrz normalnej klasy i użyć zdefiniowanego typu jak dowolnego innego zadeklarowanego typu.Deklaracja przekazywania klasy szablonu zagnieżdżonej w klasie szablonu

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

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

Teraz, jeśli zewnętrzny sam jest klasą szablonów, czy istnieje sposób na zachowanie deklaracji Innera poza deklaracją Outera? Coś jak:

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

Czy istnieje poprawna składnia do zadeklarowania Outer z odpowiednimi parametrami szablonu?

Odpowiedz

7

Wypróbuj następujące

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

Według C++ Standard (14.5.2 szablony użytkownika)

1 Szablon może być zgłaszane w ramach klasy lub klasy szablonu; taki szablon nazywany jest szablonem członka. Szablon członka można zdefiniować jako w definicji definicji klasy lub szablonu klasy lub poza nią. Szablon elementu szablonu klasy zdefiniowanego poza jego definicją szablonu klasy należy określić przy użyciu szablonów parametrów szablonu , a następnie szablonów parametrów szablonu elementu, z następującymi po nim parametrami szablonu .

+0

O Boże, to było tak oczywiste ... Dzięki za odpowiedź :) – Louen

+1

@Louen Serdecznie zapraszamy. :) –

Powiązane problemy