我写了一个小课程来帮助转换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
可以从我传递的整数中推断出来?发生了什么事?
答案 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()中使用的方法。