由于数小时的14小时,我的大脑融化了。

我有一个模板类,并且我正在尝试为此类编写一个模板转换构造函数,并专门化该构造函数。编译器(MSVC9)使我很不满意。这是我要编写的实际代码的最小示例。编译器错误与代码内联。

帮我解开我的大脑。我要执行的操作需要什么语法?注意:在我的真实代码中,我必须在声明之外定义convert构造函数,因此这不是我的选择。

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

最佳答案

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

另请注意,必须删除typename 中的const typename B&关键字

07-27 13:34