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中文网其他相关文章!