2012-10-23 9 views
11

mogę zdefiniować specjalizuje funkcji w CPP jak tak ...Definiowanie specjalizacji szablonów w cpp?

// nagłówek

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

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

// CPP

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

Jak mogę zdefiniować metodę w specjalistycznej klasie w cpp? Podobnie jak (co nie działa, mam error C2910: 'A<int>::func' : cannot be explicitly specialized) ...

// nagłówek

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

Czy sprawdzić to: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen

+0

@Pukku To dotyczy specjalizacji w metodzie klasa nie-szablonowa, która w rzeczywistości jest tym samym, co specjalizacja funkcji autonomicznej (jak w moim przykładzie roboczym powyżej). Pytam o zdefiniowanie metody w wyspecjalizowanej _klasce_ w cpp. – David

Odpowiedz

4

Użyj następującej składni w pliku .cpp:

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

To jest funkcja dodatkowa Visual C++.

Zobacz MSDN C2910 error description do szczegółów:

Ten błąd będzie również generowane w wyniku pracy kompilator zgodności, które zostały wykonane w Visual Studio .NET 2003 :. Kod będzie ważny w wersjach Visual C++ Visual Studio .NET 2003 i Visual Studio. Visual C++, usuń szablon <>.

+3

To jest zależna od kompilatora funkcja programu Visual Studio. Zobacz pytanie http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-declaration-of-a-template-class-be-in-the i http://stackoverflow.com/ pytania/495021/why-can-templates-only-be-applied-in-the-header-file – 8bitwide