6

Tôi đang cố gắng để chuyên một phần một hàm thành viên templated của một lớp untemplated:phần mẫu chuyên môn của chức năng thành viên: "nguyên mẫu không phù hợp"

#include <iostream> 

template<class T> 
class Foo {}; 

struct Bar { 

    template<class T> 
    int fct(T); 

}; 

template<class FloatT> 
int Bar::fct(Foo<FloatT>) {} 


int main() { 
    Bar bar; 
    Foo<float> arg; 
    std::cout << bar.fct(arg); 
} 

Tôi nhận được lỗi sau:

c.cc:14: error: prototype for ‘int Bar::fct(Foo<FloatT>)’ does not match any in class ‘Bar’ 
c.cc:9: error: candidate is: template<class T> int Bar::fct(T) 

Làm cách nào để khắc phục lỗi trình biên dịch?

Trả lời

9

Không được phép chuyên môn hóa một phần chức năng (thành viên hoặc cách khác).

Sử dụng quá tải:

struct Bar { 

    template<class T> 
    int fct(T data); 

    template<class T> //this is overload, not [partial] specialization 
    int fct(Foo<T> data); 

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