tôi có mã này:Các tham số mẫu mặc định: Tại sao trình biên dịch phàn nàn về việc không chỉ rõ đối số mẫu?
struct A{};
template<class T = A>
struct B {
void foo() {}
};
B b; //Error: missing template arguments before 'b'
//Error: expected ';' before 'b'
//More errors
b.foo()
Nếu tôi làm foo()
làm mẫu chức năng với cùng mẫu chữ ký ', trình biên dịch không phàn nàn về việc không quy định cụ thể các đối số mẫu:
struct A {};
struct B {
template<class T = A>
void foo() {}
};
B b; //OK
b.foo()
Vì vậy, tại sao tôi cần phải xác định một đối số cho một lớp mẫu với một tham số mặc định, nhưng không phải cho một hàm mẫu? Có một số tinh tế tôi đang thiếu?
Lý do là do lỗi khấu trừ đối số mẫu cho chắc chắn. Nhưng tôi muốn biết tại sao.
Có một từ nào bị thiếu trong tiêu đề của câu hỏi này không? – Pointy
Có. Thiếu từ - phàn nàn. Đã thêm nó. – badmaash
Bản sao có thể có của * [Đối số mẫu mặc định cho mẫu chức năng] (http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates) *. –