首页 > 后端开发 > C++ > C 17 模板推导指南如何简化模板参数推理?

C 17 模板推导指南如何简化模板参数推理?

Mary-Kate Olsen
发布: 2024-12-09 14:11:15
原创
604 人浏览过

How Do C  17 Template Deduction Guides Simplify Template Argument Inference?

C 17 模板推导指南:简单说明

什么是模板推导指南?

模板推导指南是 C 17 中引入的一项功能,可帮助编译器推断构造函数的模板参数。它们提供了一种指定构造函数参数及其类型如何映射到模板参数的方法。

我们为什么(以及何时)需要它们?

模板推导指南是必要的当无法直接从参数类型中从构造函数参数中推导模板参数时。例如,从迭代器对初始化向量需要了解迭代器的基础值类型。

如何声明它们?

模板推导指南使用以下方式声明以下语法:

template <template-argument-list>
class-template id (function-parameter-list) -> deduced-type;
登录后复制

这里,template-argument-list 表示正在使用的模板参数deduced、function-parameter-list 表示构造函数参数,而 deduced-type 是结果推导的模板类型。

示例:

考虑 std::vector 构造函数需要一个迭代器对:

template <typename Iterator>
void func(Iterator first, Iterator last) {
  vector v(first, last);
}
登录后复制

要推导向量的类型 T,我们需要使用模板推导指南:

template <typename Iterator>
vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
登录后复制

该指南指示编译器将 T 推导为给定迭代器类型的 std::iterator_traits 的 value_type。

聚合初始化演绎指南:

模板演绎指南也可以与聚合一起使用初始化:

template <typename T>
struct Thingy {
  T t;
};

Thingy(const char *) -> Thingy<std::string>;

Thingy thing{"A String"}; //thing.t is a `std::string`.
登录后复制

在此示例中,推导指南启用使用 const char* 初始化 Thingy,同时将 T 推导为 std::string。

注意: 推导指南仅用于推断模板参数。无论选择何种推导指南,实际的初始化过程都遵循与之前相同的规则。

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

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