首页 > 后端开发 > C++ > C 17 的 `auto` 关键字如何简化模板参数推导?

C 17 的 `auto` 关键字如何简化模板参数推导?

Barbara Streisand
发布: 2024-12-04 13:47:10
原创
498 人浏览过

How Does C  17's `auto` Keyword Simplify Template Parameter Deduction?

C 17 中自动模板参数推导的优点

C 17 引入了

用于模板实例化的 auto 的自然扩展

与用于变量声明的 auto 关键字类似,

auto v1 = constant<5>;      // v1 == 5, decltype(v1) is int
auto v2 = constant<true>;   // v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>;    // v3 == 'a', decltype(v3) is char
登录后复制

与用于变量声明的 auto 关键字类似,

自动>模板参数中的 允许您在实例化时推断非类型参数的类型。它消除了显式指定参数类型的需要,如下例所示:

template <typename Type, Type value> constexpr Type constant = value;
constexpr auto const IntConstant42 = constant<int, 42>;
登录后复制

增强便利

template <auto value> constexpr auto constant = value;
constexpr auto const IntConstant42 = constant<42>;
登录后复制

替换显式类型声明极大地简化了模板代码,使其更具可读性和可维护性。考虑以下代码:

可以使用 重写此代码。如下:

template <auto ... vs> struct HeterogenousValueList {};
using MyList1 = HeterogenousValueList<42, 'X', 13u>;

template <auto v0, decltype(v0) ... vs> struct HomogenousValueList {};
using MyList2 = HomogenousValueList<1, 2, 3>;
登录后复制

提高代码简洁性

在使用可变模板参数时特别有用。例如,创建常量值的编译时列表变得更加简洁和直接:相比之下,在 Pre-C 17 中实现相同的功能将需要涉及额外模板的更详细和复杂的构造。

以上是C 17 的 `auto` 关键字如何简化模板参数推导?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板