2015-11-27 20 views
5

Sto cercando di specializzarsi una funzione all'interno di una specializzazione di un modello di classe, ma non riesco a capire la giusta sintassi:specializzazione esplicita di una funzione di modello per un modello di classe completo specializzata

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> template<> 
void Foo<int>::fn<char>() {} // error: too many template-parameter-lists 

Here I' Sto cercando di specializzarmi su fn per char, che è all'interno di Foo specializzato per int. Ma al compilatore non piace quello che scrivo. Quale dovrebbe essere la sintassi corretta allora?

risposta

6

Non devi dire che ti stai specializzando due volte.

Stai solo specializzata uno modello di funzione qui

template<> void Foo<int>::fn<char>() {} 

Live On Coliru

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> void Foo<int>::fn<char>() {} 

int main() { 
    Foo<int> f; 
    f.fn<char>(); 
} 
+1

Sorprendentemente, il messaggio di errore del compilatore era perfetto. –

Problemi correlati