7 Stimmen

Spezialisierung des Template-Konstruktors der Template-Klasse

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

7voto

icecrime Punkte 70619
template<> template<typename B> Gizmo<string>::Gizmo(const B& b)

Beachten Sie auch, dass die typename Schlüsselwort aus const typename B& muss entfernt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X