C 17 引入了模板推导指南的概念,为开发人员提供了增强类型推断的强大工具。本文揭示了模板推导指南的本质,探讨了其目的和实现。
模板推导指南是告知编译器如何在计算过程中推导模板实参的指令。构造函数初始化。它们提供了一种基于构造函数参数指定模板参数的方法,这些参数可能不直接对应于模板的类型参数。
当模板推导指南变得至关重要时,模板类型不能仅从构造函数参数的类型推断出来。 std::vector 类提供了一个经典示例。它的构造函数接受迭代器对,但必须根据 iterator_traits 特征推导模板类型 (T)。如果没有模板推导指南,则需要显式类型规范,这可能会很冗长且容易出错。
模板推导指南遵循以下语法:
template<typename... Args> ReturnType(Args...) -> Template<DeducedArguments...>;
例如,将声明向量迭代器对构造函数如:
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::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'
需要注意的是,模板推导指南并不等同于构造函数。它们仅在初始化时确定模板类型,而实际构建不受推导指南影响。
以上是C 17 模板推导指南如何增强类型推断?的详细内容。更多信息请关注PHP中文网其他相关文章!