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

乔纳森·米

引入了变量模板,因此我可以这样做:

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

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

const auto TWO_PI = 2.0F * PI;

在这里,我希望PI<float>编译器似乎能够推断出这一点。编译器为什么不为我选择它?

黑猫

不,不可能。*


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

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.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章