Mi cerebro se ha derretido debido a varias semanas de días de 14 horas.Constructor de plantillas especializadas de la clase de plantilla
Tengo una clase de plantilla, y estoy tratando de escribir un constructor de conversión de plantilla para esta clase, y especializo ese constructor. El compilador (MSVC9) está bastante disgustado conmigo. Este es un ejemplo mínimo de código real que intento escribir. El error del compilador está en línea con el código.
Ayúdame a unmelt mi cerebro. ¿Cuál es la sintaxis que necesito aquí para hacer lo que estoy tratando de hacer? NOTA: En mi código real, I debe definir el constructor de conversiones fuera de la declaración, por lo que no es una opción para mí.
#include <string>
#include <sstream>
using namespace std;
template<typename A>
class Gizmo
{
public:
Gizmo() : a_() {};
Gizmo(const A& a) : a_(a) {};
template<typename Conv> Gizmo(const Conv& conv) : a_(static_cast<A>(conv)) {};
private:
A a_;
};
//
// ERROR HERE:
// " error C2039: 'Gizmo<B>' : is not a member of 'Gizmo<A>'"
//
template<> template<typename B> Gizmo<string>::Gizmo<typename B>(const B& b)
{
stringstream ss;
ss << b;
ss >> a_;
}
int main()
{
Gizmo<int> a_int;
Gizmo<int> a_int2(123);
Gizmo<string> a_f(546.0f);
return 0;
}
Por el bien de los lectores en el futuro, eliminé el espurio 'typename' en mi problema original. –