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中文網其他相關文章!