2011-07-08 40 views
10

myTemplateTemplate mong đợi tham số mẫu thứ hai là mẫu có một đối số. myDefaultTemplate là một mẫu có hai đối số và đối số thứ hai có kiểu int mặc định.Tại sao mẫu với đối số mẫu mặc định không thể được sử dụng làm mẫu có đối số mẫu ít hơn trong Tham số mẫu mẫu

Trong VS2008, tôi nhận được lỗi biên dịch: danh sách tham số mẫu cho lớp mẫu 'myDefaultTemplate' không phù hợp với danh sách tham số mẫu cho mẫu tham số 'TT'

Vì vậy, tại sao myDefaultTemplate có thể không được sử dụng làm mẫu với chỉ một đối số? Có bất kỳ tác động tiêu cực nào nếu trình biên dịch C++ hỗ trợ nó không?

template 
<typename T1, typename T2 = int> 
class 
myDefaultTemplate{ 
     T1 a; 
     T2 b; 
}; 

template 
<typename T1, template<typename T2> class TT> 
class 
myTemplateTemplate{ 
     T1 a; 
     TT<T1> b; 
}; 

int main(int argc, char* argv[]){ 
     myTemplateTemplate<int, myDefaultTemplate> bar; //error here:  
     return 0; 
} 
+15

Bạn sẽ nhận được huy hiệu cho "Câu hỏi sử dụng từ 'mẫu' nhiều lần nhất" :) – Praetorian

Trả lời

7

Từ tiêu chuẩn (xem 14.3.3 đoạn 1 - [temp.arg.template):

A template-argument for a template template-parameter shall be the name of a class template, expressed as id-expression. Only primary class templates are considered when matching the template template argument with the corresponding parameter; partial specializations are not considered even if their parameter lists match that of the template template parameter.

Điều đó có nghĩa các mẫu myDefaultTemplate sẽ được nhìn thấy chỉ là 2 đối số mẫu. Đối số mặc định sẽ không được xem xét.

+0

Vâng, đây là câu trả lời tôi mong đợi. Cảm ơn – RolandXu

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