Ho una classe template con una funzione di membro templatespecializzazione di funzione di membro basato su modelli in classe template
template<class T>
class A {
public:
template<class CT>
CT function();
};
Ora voglio specializzare la funzione di membro template in 2 modi. In primo luogo per avere lo stesso tipo della classe:
template<class T>
template<> // Line gcc gives an error for, see below
T A<T>::function<T>() {
return (T)0.0;
}
In secondo luogo per il tipo bool:
template<class T>
template<>
bool A<T>::function<bool>() {
return false;
}
Ecco come sto provando a testarlo:
int main() {
A<double> a;
bool b = a.function<bool>();
double d = a.function<double>();
}
Ora gcc mi dà per la linea indicata sopra:
error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize
Quindi gcc mi sta dicendo che devo specializzarmi in A, se voglio specializzare la funzione, giusto? Non voglio farlo, voglio che il tipo di classe esterna sia aperto ...
È la risposta finale: non è possibile? O c'è un modo?
Eventuali duplicati di http://stackoverflow.com/q/3040201/498253 – Tom