2010-11-05 33 views
6
class Example { 

    // ... 
}; 

template <typename T, Example ex> //Error 
class MyExample{ 

    // ... 
}; 

Câu hỏi của tôi là tại sao không thể lấy mẫu các tham số không thuộc loại?Tại sao không thể nhập các thông số loại không thuộc loại lớp

Các lỗi mà tôi nhận được là

error: ‘class Example’ is not a valid type for a template constant parameter

+2

Vui lòng làm rõ - bạn đang gặp phải lỗi biên dịch nào? – seand

+0

Thử (Ví dụ * ex). Nó sẽ hoạt động:] – k06a

+0

Có thể (ví dụ & cũ) hoạt động. Cứ thử đi . . . – k06a

Trả lời

13

Đơn giản, vì đó là những quy tắc. Một cách hợp lý, các tham số khuôn mẫu phải được giải quyết tại thời gian biên dịch và các đối tượng kiểu lớp chỉ được xây dựng (ngay cả các thời gian tạm thời và các đối tượng có thời gian lưu trữ tĩnh) tại thời gian chạy. Bạn chỉ có thể có tham số mẫu là "giá trị" có thể phân giải tại thời gian biên dịch như số nguyên và loại. Tuy nhiên, có thể có các tham số mẫu là các con trỏ hoặc tham chiếu đến các đối tượng.

3

Theo c++ standard,

A non-type template-parameter shall have one of the following (optionally cv-qualified) types: 
— integral or enumeration type, 
— pointer to object or pointer to function, 
— reference to object or reference to function, 
— pointer to member. 

A non-type template-parameter shall not be declared to have floating point, **class**, or void type. 

Rõ ràng là bất kỳ std phù hợp với trình biên dịch ném một lỗi nếu bạn khai báo lớp như không kiểu mẫu đối số.

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