6

Sto cercando di specializzarsi in parte una funzione membro di una classe template untemplated:parziale modello di specializzazione della funzione membro: "prototipo non corrisponde"

#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); 
} 

sto ottenendo il seguente errore:

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) 

Come posso correggere l'errore del compilatore?

risposta

9

La specializzazione parziale delle funzioni (membro o altro) non è consentita.

Uso sovraccarico:

struct Bar { 

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

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

}; 
Problemi correlati