我编写了一个小类类(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()中使用的方法。

08-19 13:06