返回介绍

5.2 变量模板

发布于 2024-08-19 12:44:37 字数 3310 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文