Pengenalan
C 17 memperkenalkan ciri hebat yang dipanggil "panduan potongan templat, " yang memainkan peranan penting dalam meningkatkan potongan hujah templat untuk pembina. Ciri ini menangani cabaran untuk membuat kesimpulan parameter templat yang sesuai semasa membina objek dengan templat.
Apakah itu Panduan Potongan Templat?
Panduan potongan templat ialah corak yang dikaitkan dengan templat kelas. Mereka membimbing pengkompil dalam menterjemahkan hujah yang dihantar kepada pembina ke dalam parameter templat yang sepadan. Pada asasnya, mereka menetapkan peraturan untuk pengkompil untuk menentukan pengkhususan templat mana yang hendak dibuat seketika berdasarkan hujah pembina.
Mengapa dan Bila Menggunakan Panduan Potongan Templat
Panduan potongan templat adalah perlu apabila parameter templat tidak boleh disimpulkan secara langsung daripada jenis hujah pembina. Keadaan ini timbul apabila hujah templat tidak diperoleh daripada jenis hujah tunggal. Sebagai contoh, pertimbangkan kes std::vector's constructor yang mengambil pasangan iterator:
template<typename Iterator> void func(Iterator first, Iterator last) { vector v(first, last); }
Dalam contoh ini, jenis parameter templat T vektor tidak boleh disimpulkan secara langsung daripada argumen Iterator. Panduan potongan mesti digunakan untuk memaklumkan pengkompil bahawa pengkhususan yang betul haruslah vektor
Mengisytiharkan Panduan Potongan Templat
Panduan potongan templat diisytiharkan menggunakan perkara berikut sintaks:
template class_name(constructor_args) -> template_args;
Contoh
Pertimbangkan contoh std::panduan potongan vektor:
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
Panduan ini mengarahkan pengkompil bahawa apabila membina std::vector menggunakan corak pembina (pasangan iterator), hujah templat T hendaklah disimpulkan sebagai typename std::iterator_traits
Panduan Permulaan Agregat dan Potongan Templat
Menariknya, panduan potongan templat juga boleh digunakan dengan agregat dan agregat permulaan:
template<typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a `std::string`.
Dalam contoh ini, panduan potongan templat digunakan untuk menyimpulkan parameter templat T of Thingy berdasarkan jenis literal rentetan yang dihantar kepada pembina agregat.
Kesimpulan
Panduan potongan templat ialah alat yang berkuasa untuk mendayakan inferens jenis apabila membina objek templat. Dengan mentakrifkan secara eksplisit cara menterjemah hujah pembina kepada parameter templat, pengaturcara boleh memudahkan proses instantiasi templat dan meningkatkan kebolehbacaan kod dengan ketara.
Atas ialah kandungan terperinci Bagaimanakah Panduan Potongan Templat C 17 Memperbaik Potongan Hujah Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!