Специализированный конструктор шаблона класса шаблона - PullRequest
7 голосов
/ 11 ноября 2010

Мой мозг растаял из-за нескольких недель 14-часовых дней.

У меня есть шаблонный класс, и я пытаюсь написать конструктор преобразования шаблона для этого класса и специализировать этот конструктор.Компилятор (MSVC9) довольно недоволен мной.Это минимальный пример реального кода, который я пытаюсь написать.Ошибка компилятора встроена в код.

Помогите мне расплавить мой мозг.Какой синтаксис мне нужен здесь, чтобы делать то, что я пытаюсь сделать?ПРИМЕЧАНИЕ. В моем реальном коде я должен определить конструктор преобразования вне объявления, поэтому для меня это не вариант.

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

1 Ответ

7 голосов
/ 11 ноября 2010
template<> template<typename B> Gizmo<string>::Gizmo(const B& b)

Также обратите внимание, что ключевое слово typename из const typename B& должно быть удалено .

...