文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.2 变量模板
2012 年,Gabriel Dos Reis 提议扩展模板机制,在模板类、函数和别名 [Dos Reis 2012] 之外加入模板变量。例如:
template<typename T>
constexpr T pi = T(3.1415926535897932385);
template<typename T>
T circular_area(T r)
{
return pi<T> * r * r;
}
起初,我觉得这是一种平淡无奇的语言技术上的泛化,没有特别重要的意义。然而,为指定各种精度的常数而采取的变通办法由来已久,而且充斥着令人不安的变通和妥协。经过这种简单的语言泛化,代码可以大幅简化。特别是,变量模板作为定义概念的主要方式应运而生(§6.3.6)。例如:
// 表达式:
template<typename T>
concept SignedIntegral = Signed<T> && Integral<T>;
C++20 标准库提供了一组定义为变量模板的数学常数,最常见的情况是定义为 constexpr
[Minkovsky and McFarlane 2019]。例如:
template<typename T> constexpr T pi_v = unspecified;
constexpr double pi = pi_v<double>;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论