Kelebihan Potongan Parameter Templat Automatik dalam C 17
C 17 memperkenalkan
Sambungan Semulajadi auto untuk Instantiasi Templat
Serupa dengan kata kunci auto yang digunakan untuk pengisytiharan berubah-ubah, < auto> dalam parameter templat membolehkan anda menyimpulkan jenis parameter bukan jenis pada masa instantiasi. Ia menghapuskan keperluan untuk menyatakan secara eksplisit jenis parameter, seperti yang dilihat dalam contoh di bawah:
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
Kemudahan Dipertingkat
Menggantikan pengisytiharan jenis eksplisit dengan
template <typename Type, Type value> constexpr Type constant = value; constexpr auto const IntConstant42 = constant<int, 42>;
Kod ini boleh ditulis semula dengan
template <auto value> constexpr auto constant = value; constexpr auto const IntConstant42 = constant<42>;
Keringkasan Kod yang Dipertingkatkan
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>;
Sebagai perbandingan, untuk mencapai kefungsian yang sama dalam pra-C 17 memerlukan lebih banyak binaan bertele-tele dan berbelit-belit yang melibatkan templat tambahan.
Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `auto` C 17 Mempermudahkan Potongan Parameter Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!