2012-10-23 16 views
11

posso definire una funzione specializzata in un cpp in questo modo ...Definire la specializzazione del modello in cpp?

// intestazione

template<typename T> 
void func(T){} 

template<> 
void func<int>(int); 

// cpp

template<> 
void func<int>(int) 
{} 

Come posso definire un metodo in una classe specializzata in un cpp? In questo modo (che non funziona, ho error C2910: 'A<int>::func' : cannot be explicitly specialized) ...

// intestazione

template<typename T> 
struct A 
{ 
    static void func(T){} 
}; 

template<> 
struct A<int> 
{ 
    static void func(int); 
}; 

// cpp

template<> 
void A<int>::func(int) 
{} 
+0

Hai controllato questo: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen

+0

@Pukku Ciò riguarda la specializzazione di un metodo in una classe non basata su modelli, che è in realtà la stessa di una specializzazione di una funzione autonoma (come nel mio esempio precedente). Sto chiedendo di definire un metodo in un _class_ specializzato in un cpp. – David

risposta

4

Usa seguente sintassi nel file .cpp:

void A<int>::func(int) 
{ 
} 

Questa è una funzionalità di tipo Visual C++.

Vedi MSDN C2910 error description per i dettagli:

Questo errore verrà inoltre generato come risultato del lavoro del compilatore conformità che è stato fatto in Visual Studio .NET 2003 :. Per il codice sarà valido nelle versioni di Visual Studio .NET 2003 e Visual Studio .NET di Visual C++, Rimuovi modello <>.

+3

Questa è una funzione dipendente dal compilatore di Visual Studio. Vedi domanda http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-the-declaration-of-a-template-class-be-in-the e http://stackoverflow.com/ domande/495021/why-can-modelli-solo-essere-implementati-in-the-header file – 8bitwide

Problemi correlati