C 17中的模板扣除指南是什么?

C 17中的模板扣除指南是什么?,第1张

概述C 17上的各种项目都提到“模板扣除指南”.我收集他们与C 17中介绍的构造函数的新模板扣除有关,但我还没有看到一个简单的,常见问题解答的解释,它们是什么,它们是什么. > C 17中的模板扣除指南是什么? 为什么(和什么时候)我们需要它们? >如何申报? 模板扣除指南是与模板类相关联的模式,可以告诉编译器如何将一组参数(及其类型)转换为模板参数. 最简单的例子是std :: vector及其构造 C 17上的各种项目都提到“模板扣除指南”.我收集他们与C 17中介绍的构造函数的新模板扣除有关,但我还没有看到一个简单的,常见问题解答的解释,它们是什么,它们是什么.

> C 17中的模板扣除指南是什么?
为什么(和什么时候)我们需要它们?
>如何申报?

解决方法 模板扣除指南是与模板类相关联的模式,可以告诉编译器如何将一组参数(及其类型)转换为模板参数.

最简单的例子是std :: vector及其构造函数,它采用迭代器对.

template<typename Iterator>voID func(Iterator first,Iterator last){  vector v(first,last);}

编译器需要确定什么向量T的T类型将是.我们知道答案是什么; T应该是typename std :: iterator_traits< Iterator> :: value_type.但是我们如何告诉编译器,而不用输入vector< typename std :: iterator_traits< Iterator> :: value_type>?

您使用扣除指南:

template<typename Iterator> vector(Iterator b,Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;

这告诉编译器,当您调用与该模式匹配的向量构造函数时,它将使用 – >右侧的代码推导出向量专门化.

当从参数中扣除类型不是基于其中一个参数的类型时,需要指导.从initializer_List初始化一个向量,显式地使用向量的T,因此它不需要指南.

左侧不一定指定构造函数.它的工作原理是,如果您在类型上使用模板构造函数扣除,它将匹配所有扣除指南(实际构造函数提供隐式指南)的参数.如果有匹配,它将使用它来确定要提供给类型的模板参数.但是重载分辨率确定哪个构造函数调用发生之后.

这也意味着您可以使用聚合和聚合初始化的指南:

template<typename T>struct Thingy{  T t;};Thingy(const char *) -> Thingy<std::string>;Thingy thing{"A String"}; //thing.t is a `std::string`.

因此,扣除指南仅用于计算初始化的类型.初始化的实际过程与之前的工作完全一样,一旦做出了确定.

总结

以上是内存溢出为你收集整理的C 17中的模板扣除指南是什么?全部内容,希望文章能够帮你解决C 17中的模板扣除指南是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1256030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存