2015-11-27 33 views
5

Tôi đang cố gắng để chuyên một chức năng trong một chuyên môn hóa của một lớp mẫu, nhưng không thể tìm đúng cú pháp:chuyên môn Explicit của một mẫu hàm cho một lớp học mẫu hoàn toàn chuyên

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> template<> 
void Foo<int>::fn<char>() {} // error: too many template-parameter-lists 

Ở đây tôi m cố gắng chuyên fn cho char, nằm trong số Foo dành riêng cho int. Nhưng trình biên dịch không thích những gì tôi viết. Vậy cú pháp đúng là gì?

Trả lời

6

Bạn không cần phải nói rằng bạn chuyên về hai lần.

Bạn chỉ chuyên một chức năng template đây

template<> void Foo<int>::fn<char>() {} 

Live On Coliru

template< typename T > 
struct Foo {}; 

template<> 
struct Foo<int> 
{ 
    template< typename T > 
    void fn(); 
}; 

template<> void Foo<int>::fn<char>() {} 

int main() { 
    Foo<int> f; 
    f.fn<char>(); 
} 
+1

Thật ngạc nhiên, thông báo lỗi của trình biên dịch là chỗ trên. –

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