这个简单的模板类我做错了什么?

时间:2010-11-15 05:27:49

标签: c++ visual-studio templates

我写了一个小课程来帮助转换MSVC笨重的类型:

template <class FromType>
struct convert
{
    convert(FromType const &from)
        :   from_(from) {}
    operator LARGE_INTEGER() {
        LARGE_INTEGER li;
        li.QuadPart = from_;
        return li;
    }
private:
    FromType const &from_;
};

后来我这样做了:

convert(0)

从MSVC收到此错误消息:

  

1&gt; e:\ src \ cpfs \ libcpfs \ device.cc(41):错误C2955:'convert':使用类模板需要模板参数列表

     

1&GT; e:\ src \ cpfs \ libcpfs \ device.cc(17):参见'convert'的声明

我认为FromType可以从我传递的整数中推断出来?发生了什么事?

1 个答案:

答案 0 :(得分:4)

类模板永远不会隐式实例化。鉴于您给出的课程定义,您必须说:

convert<int>(0)

...调用该类的构造函数。

使用默认模板参数,您可以将(?)改进为:

template <class FromType = int>
struct convert
{ /* ... */ };

然后将其调用为:

convert<>(0)

...但我担心这是你用类模板做的最好的事情。您可能希望使用为您实例化类对象的函数模板:

template <typename FromType>
convert<FromType> make_convert(FromType from) {
   return convert<FromType>(from);
}

这或多或少是std :: make_pair()中使用的方法。