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