2010-04-23 29 views
7

Tôi có lớp không phải mẫu với một hàm tạo templatized. Mã này biên dịch cho tôi. Nhưng tôi nhớ rằng một nơi nào đó tôi đã gọi rằng các nhà xây dựng không thể là mẫu. Ai đó có thể giải thích cho dù đây là một cách sử dụng hợp lệ?C++ Constructors có thể là mẫu không?

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

Xin cảm ơn, Gokul.

+1

Thực tế, tất cả các vùng chứa STL đều có ít nhất một hàm tạo templatized. (Đó là một trong đó có hai vòng lặp của bất kỳ loại vòng lặp tương thích.) – sbi

Trả lời

12

Có, nhà xây dựng có thể là mẫu.

13

Hoàn toàn hợp lệ đối với các nhà xây dựng làm thành viên mẫu. Điều duy nhất mà tôi có thể nghĩ rằng bạn có thể nghĩ là một nhà xây dựng mẫu không bao giờ là một nhà xây dựng bản sao để một nhà xây dựng khuôn mẫu sẽ không tự ngăn chặn việc tạo ra một trình biên dịch tạo ra bản sao xây dựng.

+4

nó mất 2 phút để hiểu những gì bạn có nghĩa là trong câu thứ hai :) – chester89

+1

Có thể tốt hơn để nói rằng "nhà xây dựng bản sao không thể là thành viên mẫu." –

Các vấn đề liên quan