2010-04-23 25 views
7

Mam klasy non-szablon z konstruktora Templatized. Ten kod jest dla mnie kompilacją. Ale pamiętam, że gdzieś wspomniałem, że konstruktorzy nie mogą być szablonami. Czy ktoś może wyjaśnić, czy jest to prawidłowe użycie?Czy konstruktory C++ mogą być szablonami?

typedef double Vector; 

//enum Method {A, B, C, D, E, F}; 
struct A {}; 

class Butcher 
{ 
public: 
template <class Method> 
Butcher(Method); 


private: 
Vector a, b, c; 
}; 

template <> 
Butcher::Butcher(struct A) 
: a(2), b(4), c(2) 
{ 
// a = 0.5, 1; 
// b = -1, 1, 3, 2; 
// c = 0, 1; 
} 

Dzięki, Gokul.

+1

W rzeczywistości wszystkie kontenery STL mają co najmniej jeden konstruktor z szablonem. (To jest ten, który pobiera dwa iteratory dowolnego kompatybilnego typu iteratora.) – sbi

Odpowiedz

12

Tak, konstruktorzy mogą być szablonami.

13

Jest to całkowicie poprawne, aby konstruktorzy byli członkami szablonu. Jedyne, co mogę myśleć, to że konstruktor szablonu nigdy nie jest konstruktorem kopiowania, więc konstruktor szablonu sam nie przeszkodzi w generowaniu konstruktora kopiowania generowanego przez kompilator.

+4

zajęło 2 minuty, aby zrozumieć, co masz na myśli w drugim zdaniu :) – chester89

+1

Może lepiej powiedzieć, że "konstruktorzy kopiowania nie mogą być członkami szablonu". –

Powiązane problemy