簡介
C 17 引入了一個強大的功能,稱為「模板推導指南”, 「這在增強構造函數的模板參數推導方面發揮著關鍵作用。此功能解決了使用模板構造物件時推斷適當模板參數的挑戰。
什麼是模板推導指南?
模板推導指南是與模板關聯的模式班級。為編譯器建立了規則,以根據構造函數的參數確定要實例化的模板專門化。指南當無法直接從建構函數參數的類型推斷模板參數時,這是必需的。 std::vector 的建構子採用迭代器對的情況:
在此範例中,無法從迭代器參數直接推斷向量的T 模板參數的類型。編譯器正確的特化應該是vector
宣告範本推導指南
template<typename Iterator> void func(Iterator first, Iterator last) { vector v(first, last); }
範本推導指南使用以下方式宣告語法:
class_name:為其宣告指南的範本類別的名稱。建構函數的參數。 🎜>
template_args:對應的範本參數template class_name(constructor_args) -> template_args;
此指南指示編譯器當使用(迭代器對)建構子模式建構std::vector時,應該推導模板參數 T as typename std::iterator_traits
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;有有趣的是,模板推導指南也可以與聚合和聚合一起使用初始化:
在這個例子中,一個模板推導指南用於根據傳遞給聚合構造函數的字符串文字的類型推導Thingy 的範本參數 T。
範本推導指南是建立模板化物件時啟用類型推斷的強大工具。透過明確定義如何將建構函數參數轉換為模板參數,程式設計師可以顯著簡化模板實例化的過程並提高程式碼可讀性。
以上是C 17 範本推導指南如何改進範本參數推導?的詳細內容。更多資訊請關注PHP中文網其他相關文章!