gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:10:54 25 4
gpt4 key购买 nike

我编写了一个小类来帮助与 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>e:\src\cpfs\libcpfs\device.cc(41): error C2955: 'convert' : use of class template requires template argument list

1> e:\src\cpfs\libcpfs\device.cc(17) : see declaration of 'convert'

我认为 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() 中使用的方法。

关于c++ - 这个简单的模板类我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com