变量模板可以推断类型吗?

时间:2018-02-23 21:23:27

标签: c++ templates c++14 type-deduction variable-templates

介绍variable templates所以我可以这样做:

checkbox

现在,使用此变量时可以推导出类型吗?例如:

template <typename T>
const auto PI = std::acos(static_cast<T>(-1));

在这里,我希望const auto TWO_PI = 2.0F * PI; 似乎编译器应该能够推断出它。为什么编译器不会为我选择这个?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。*

*有一个丑陋的选择,但我建议不要使用它:

template <typename T> const auto pi = std::acos(static_cast<T>(-1));

struct auto_pi_t {} auto_pi;

template <typename T> auto operator+(T a, auto_pi_t)
{return a + pi<std::conditional_t<std::is_floating_point_v<T>, T, double>>;}
template <typename T> auto operator+(auto_pi_t, T a)
{return pi<std::conditional_t<std::is_floating_point_v<T>, T, double>> + a;}
// For similar overloads for all plausible operators.