tengo una clase de plantilla con una función miembro de plantillaLa especialización de la función miembro de plantilla en la clase de plantilla
template<class T>
class A {
public:
template<class CT>
CT function();
};
Ahora quiero especializar la función miembro de plantilla de 2 maneras. En primer lugar por tener el mismo tipo que la clase:
template<class T>
template<> // Line gcc gives an error for, see below
T A<T>::function<T>() {
return (T)0.0;
}
segundo lugar para el tipo bool:
template<class T>
template<>
bool A<T>::function<bool>() {
return false;
}
Así es como estoy tratando de probarlo:
int main() {
A<double> a;
bool b = a.function<bool>();
double d = a.function<double>();
}
Ahora gcc me da para la línea marcada arriba:
error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize
Entonces, gcc me está diciendo que tengo que especializar A, si quiero especializarme en la función, ¿no? No quiero hacer eso, quiero que el tipo de la clase externa esté abierto ...
¿Es la respuesta definitiva: no es posible? ¿O hay alguna manera?
duplicado Posible de http://stackoverflow.com/q/3040201/498253 – Tom