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
Lepaskan: 2024-12-09 14:11:15
asal
596 orang telah melayarinya

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;
Salin selepas log masuk

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);
}
Salin selepas log masuk

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>;
Salin selepas log masuk

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`.
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan