我编写了一个小类类(class)来协助与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获取此错误消息:我以为
FromType
可以从我传递的整数中推断出来?到底是怎么回事? 最佳答案
类模板永远不会隐式实例化。给定您给定的类定义,您必须说:
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()中使用的方法。