C 17 memperkenalkan konsep panduan potongan templat, memperkasakan pembangun dengan alat yang mujarab untuk mempertingkatkan inferens jenis. Artikel ini membongkar intipati panduan potongan templat, meneroka tujuan dan pelaksanaannya.
Panduan potongan templat ialah arahan yang memaklumkan pengkompil tentang cara menyimpulkan hujah templat semasa permulaan pembina. Ia menyediakan cara untuk menentukan parameter templat berdasarkan hujah pembina yang mungkin tidak sepadan secara langsung dengan parameter jenis templat.
Panduan potongan templat menjadi penting apabila jenis templat tidak boleh disimpulkan semata-mata daripada jenis hujah pembina. Kelas std::vector menyediakan contoh klasik. Pembinanya menerima pasangan lelaran, tetapi jenis templat (T) mesti disimpulkan berdasarkan ciri iterator_traits. Tanpa panduan potongan templat, spesifikasi jenis eksplisit akan diperlukan, yang boleh menjadi lebih jelas dan mudah ralat.
Panduan potongan templat mematuhi sintaks berikut:
template<typename... Args> ReturnType(Args...) -> Template<DeducedArguments...>;
Sebagai contoh, pembina pasangan lelaran vektor akan diisytiharkan sebagai:
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
Panduan potongan templat melangkaui kelas dan pembina, membolehkan penggunaannya dengan permulaan agregat:
template<typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a 'std::string'
Adalah penting untuk ambil perhatian bahawa potongan templat panduan tidak sama dengan pembina. Mereka hanya menentukan jenis templat semasa pemulaan, manakala pembinaan sebenar kekal tidak terjejas oleh panduan potongan.
Atas ialah kandungan terperinci Bagaimanakah Panduan Potongan Templat C 17 Meningkatkan Inferens Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!