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

Bagaimanakah Panduan Potongan Templat C 17 Memperbaik Potongan Hujah Templat?

Linda Hamilton
Lepaskan: 2024-12-10 22:45:12
asal
393 orang telah melayarinya

How Do C  17 Template Deduction Guides Improve Template Argument Deduction?

Panduan Potongan Templat: Penjelasan Komprehensif

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

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::value_type>.

Mengisytiharkan Panduan Potongan Templat

Panduan potongan templat diisytiharkan menggunakan perkara berikut sintaks:

template class_name(constructor_args) -> template_args;
Salin selepas log masuk
  • class_name: Nama kelas templat yang panduan diisytiharkan.
  • constructor_args: Argumen dihantar kepada pembina yang sepadan dengan panduan.
  • template_args: Parameter templat yang sepadan disimpulkan.

Contoh

Pertimbangkan contoh std::panduan potongan vektor:

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

Panduan ini mengarahkan pengkompil bahawa apabila membina std::vector menggunakan corak pembina (pasangan iterator), hujah templat T hendaklah disimpulkan sebagai typename std::iterator_traits::value_type.

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

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!

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