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

Mar*_*zek 4 c++ templates class template-specialization

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

template < class T = float >
class apple { 
public:
    T x;
    apple(T x): x(x) {}
}
Run Code Online (Sandbox Code Playgroud)

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

apple obj(2);
Run Code Online (Sandbox Code Playgroud)

除非我这样做,否则类型将变成int:

apple<float> obj(2);
Run Code Online (Sandbox Code Playgroud)

我如何使其保持漂浮?

Que*_*tin 5

添加此推导指南以强制将所有参数推导解析为您的默认参数:

template <class T>
apple(T) -> apple<>;
Run Code Online (Sandbox Code Playgroud)

  • @StoryTeller所有抱怨脚枪的人都只是缺少一个事实,即您*应该*将其后退。 (4认同)
  • 使用演绎指南禁用CTAD。这是一些深奥的魔力 (2认同)