Mein Gehirn ist durch mehrere Wochen mit 14-Stunden-Tagen geschmolzen.
Ich habe eine Template-Klasse, und ich versuche, eine Vorlage konvertieren Konstruktor für diese Klasse zu schreiben, und spezialisieren, dass Konstruktor. Der Compiler (MSVC9) ist ziemlich unzufrieden mit mir. Dies ist ein minimales Beispiel für tatsächlichen Code, den ich zu schreiben versuche. Der Compilerfehler ist inline mit dem Code.
Hilf mir, mein Gehirn zu entschmelzen. Wie lautet die Syntax, die ich hier brauche, um das zu tun, was ich zu tun versuche? HINWEIS: In meinem echten Code habe ich muss den Konvertierungskonstruktor außerhalb der Deklaration definieren, also ist das für mich keine Option.
#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;
}