2009-06-09 23 views
119

wiem, że to możliwe, aby funkcję szablonu:Jak utworzyć funkcję szablonu w klasie? (C++)

template<typename T> 
void DoSomeThing(T x){} 

i jest możliwe, aby uczynić klasę szablonu:

template<typename T> 
class Object 
{ 
public: 
    int x; 
}; 

ale jest to możliwe, aby klasa nie w szablonie , a następnie uczynić z funkcji tej klasy szablon? Tzn .:

//I have no idea if this is right, this is just how I think it would look 
class Object 
{ 
public: 
    template<class T> 
    void DoX(){} 
}; 

lub coś w takim stopniu, w którym klasa nie jest częścią szablonu, ale funkcja jest?

Odpowiedz

88

Twoje przypuszczenie jest poprawna. Jedyną rzeczą, którą musisz pamiętać jest to, że szablon funkcji członka definicja (oprócz deklaracji) powinien znajdować się w pliku nagłówkowym, a nie w CPP, ale musi być , a nie musi znajdować się w treści deklaracji klasy samo.

+3

A także, że nie można ich wyspecjalizować. :-( –

+7

Niezupełnie prawdziwa Definicja może być w pliku cpp, o ile zostanie wywołana raz dla każdego unikalnego parametru szablonu n-uplet z nie-szablonu funkcji/metody po jej zdefiniowaniu –

+1

Stąd moje " powinien "- utrzymanie go w nagłówku jest najprostszym sposobem na osiągnięcie tego." –

58

Zobacz tutaj: Templates, template methods, państwa Szablony państwa Szablony funkcyjne

class Vector 
{ 
    int  array[3]; 

    template <class TVECTOR2> 
    void eqAdd(TVECTOR2 v2); 
}; 

template <class TVECTOR2> 
void Vector::eqAdd(TVECTOR2 a2) 
{ 
    for (int i(0); i < 3; ++i) array[i] += a2[i]; 
} 
15

Tak, funkcje elementów szablonu są całkowicie legalne i przydatne przy wielu okazjach.

Jedynym zastrzeżeniem jest to, że funkcje członków szablonów nie mogą być wirtualne.

Powiązane problemy