Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Panduan Potongan Templat C 17 Memudahkan Inferens Hujah Templat?

Bagaimanakah Panduan Potongan Templat C 17 Memudahkan Inferens Hujah Templat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 14:11:15596semak imbas

How Do C  17 Template Deduction Guides Simplify Template Argument Inference?

Panduan Potongan Templat C 17: Penjelasan Ringkas

Apakah itu Panduan Potongan Templat?

Panduan potongan templat ialah ciri yang diperkenalkan dalam C 17 yang membantu pengkompil dalam membuat kesimpulan hujah templat untuk pembina. Mereka menyediakan cara untuk menentukan cara hujah pembina dan jenisnya memetakan kepada parameter templat.

Mengapa (dan Bila) Kita Memerlukannya?

Panduan potongan templat diperlukan apabila pemotongan hujah templat daripada hujah pembina tidak boleh dilakukan terus daripada jenis hujah. Contohnya, memulakan vektor daripada pasangan lelaran memerlukan pengetahuan tentang jenis nilai asas lelaran.

Bagaimana untuk Mengisytiharkannya?

Panduan potongan templat diisytiharkan menggunakan sintaks berikut:

template <template-argument-list>
class-template id (function-parameter-list) -> deduced-type;

Di sini, template-argument-list menunjukkan argumen templat yang sedang disimpulkan, function-parameter-list mewakili hujah pembina, dan deduced-type ialah jenis templat yang disimpulkan yang terhasil.

Contoh:

Pertimbangkan std: :pembina vektor yang mengambil pasangan lelaran:

template <typename Iterator>
void func(Iterator first, Iterator last) {
  vector v(first, last);
}

Untuk menyimpulkan jenis T daripada vektor, kita perlu menggunakan panduan potongan templat:

template <typename Iterator>
vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;

Panduan ini mengarahkan pengkompil untuk menyimpulkan T sebagai nilai_jenis std::iterator_traits untuk jenis lelaran yang diberikan.

Permulaan Agregat dengan Panduan Potongan:

Potongan templat panduan juga boleh digunakan dengan pemulaan agregat:

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 pemotongan membolehkan pemulaan Thingy dengan const char* sambil menyimpulkan T sebagai std::string.

Nota: Panduan potongan hanya digunakan untuk membuat kesimpulan hujah templat. Proses pemulaan sebenar mengikut peraturan yang sama seperti sebelum ini, tanpa mengira panduan potongan yang dipilih.

Atas ialah kandungan terperinci Bagaimanakah Panduan Potongan Templat C 17 Memudahkan Inferens Hujah Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn