2010-04-23 34 views
7

我有一個模板化構造函數的非模板類。這段代碼爲我編譯。但我記得我曾經提到構造函數不能成爲模板。有人可以解釋這是否是一種有效的用法?C++構造函數可以是模板嗎?

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; 
} 

感謝, 戈庫爾。

+1

實際上,所有STL容器都至少有一個模板化構造函數。 (這是需要任何兼容迭代器類型的兩個迭代器的那個)。 – sbi 2010-04-23 07:28:54

回答

12

是的,構造函數可以是模板。

13

構造函數對模板成員來說是完全有效的。我認爲你可能會想到的唯一事情就是模板構造函數永遠不是一個拷貝構造函數,所以模板構造函數本身不會阻止生成編譯器生成的拷貝構造函數。

+4

花了2分鐘來理解第二句中的含義:) – chester89 2010-04-23 07:20:59

+1

可能更好地說「複製構造函數不能成爲模板成員」。 – 2010-04-23 14:45:05

相關問題