我的模板类有问题。我这样指定了模板类的默认类型:
template < class T = float >
class apple {
public:
T x;
apple(T x): x(x) {}
}
但是,当我创建这样的对象时:
apple obj(2);
除非我这样做,否则类型会转换为int:
apple<float> obj(2);
我如何使其保持漂浮?
答案 0 :(得分:5)
添加此推论指南,以强制将所有参数推论解析为您的默认参数:
template <class T>
apple(T) -> apple<>;
答案 1 :(得分:3)
将特殊化用于默认模板参数,例如
apple<> obj( 2 );
答案 2 :(得分:1)
另一种可能的解决方案是修改构造函数:
apple(std::enable_if_t<1, T> x): x(x) {}
这样,编译器将无法从您传递给T
的参数中推断出x
,而将T
(您提供的)的默认类型使用。