除非另有说明,如何强制模板类使用指定的类型?

时间:2019-07-14 12:14:06

标签: c++ class templates template-specialization

我的模板类有问题。我这样指定了模板类的默认类型:

template < class T = float >
class apple { 
public:
    T x;
    apple(T x): x(x) {}
}

但是,当我创建这样的对象时:

apple obj(2);

除非我这样做,否则类型会转换为int:

apple<float> obj(2);

我如何使其保持漂浮?

3 个答案:

答案 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(您提供的)的默认类型使用。