Tôi đang gặp sự cố khi chuyên về mẫu bên trong khi tất cả thông số đều được biết. Dưới đây là ví dụ:Chuyên mẫu bên trong với các thông số mặc định
template < typename T0 >
struct outer
{
template < typename T1 = void, typename T2 = void >
struct inner
{
typedef T1 type;
};
};
template < typename T0 >
template < typename T1 >
struct outer<T0>::inner<double,T1> { typedef int type; };
Điều này chỉ hoạt động tốt. Nếu tôi thay vì chỉ định mẫu bên trong như vậy, nó không:
template < typename T0 >
template < >
struct outer<T0>::inner<double,void> { typedef int type; };
Đối với điều này tôi nhận được thông báo lỗi, "chuyên môn hóa rõ ràng không hợp lệ trước '>' dấu hiệu ... kèm theo mẫu lớp không rõ ràng chuyên ngành .. .template tham số không được sử dụng trong chuyên môn hóa một phần: ... T0 ". Không chắc chắn WTAF đang diễn ra ở đây.
Tôi cũng đã cố gắng này:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
tôi mong đợi này thất bại và được thông báo lỗi là không đáng ngạc nhiên. Đó là: "quá ít mẫu tham số-danh sách".
Vì vậy, cách chính xác để làm điều này là gì? Tôi có thể tất nhiên hack xung quanh nó, nhưng nếu tôi không phải tôi không thích.
liên quan: http://stackoverflow.com/questions/9219157/why-cant-i-specialize-the-nested-template lq = 1 –
Hmm ... Tôi đã thực hiện tìm kiếm nhưng điều đó không hiển thị. Phải không hy sinh đúng loài dê trước khi làm như vậy. –