> 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中的模板扣除指南是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)