首頁 >後端開發 >C++ >C 17 的 `auto` 關鍵字如何簡化模板參數推導?

C 17 的 `auto` 關鍵字如何簡化模板參數推導?

Barbara Streisand
Barbara Streisand原創
2024-12-04 13:47:10451瀏覽

How Does C  17's `auto` Keyword Simplify Template Parameter Deduction?

C 17 中自動模板參數推導的優點

C 17 引入了

用於模板實例化的auto 的自然擴展

與用於變量聲明的auto 關鍵字類似,

auto v1 = constant<5>;      // v1 == 5, decltype(v1) is int
auto v2 = constant<true>;   // v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>;    // v3 == 'a', decltype(v3) is char

與用於變數宣告的auto 關鍵字類似,

自動>模板參數中的允許您在實例化時推斷非類型參數的類型。它消除了明確指定參數類型的需要,如下例所示:

template <typename Type, Type value> constexpr Type constant = value;
constexpr auto const IntConstant42 = constant<int, 42>;

增強便利

template <auto value> constexpr auto constant = value;
constexpr auto const IntConstant42 = constant<42>;

取代明確型別宣告極大簡化了模板程式碼,使其更具可讀性和可維護性。考慮以下程式碼:

可以使用 重寫此程式碼。如下:

template <auto ... vs> struct HeterogenousValueList {};
using MyList1 = HeterogenousValueList<42, 'X', 13u>;

template <auto v0, decltype(v0) ... vs> struct HomogenousValueList {};
using MyList2 = HomogenousValueList<1, 2, 3>;

提高程式碼簡潔性

使用可變模板參數時特別有用。例如,創建常數值的編譯時列表變得更加簡潔和直接:相比之下,在Pre-C 17 中實現相同的功能將需要涉及額外模板的更詳細和複雜的構造。

以上是C 17 的 `auto` 關鍵字如何簡化模板參數推導?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn