Potongan Argumen Templat Kelas Separa dalam C 17
Potongan Argumen Templat Kelas (CTAD) dalam C 17 membolehkan pengkompil menyimpulkan hujah templat daripada hujah yang disediakan. Walaupun ciri ini membenarkan potongan automatik, adakah mungkin untuk menentukan sebahagian hujah templat dan membiarkan yang lain untuk pengkompil membuat kesimpulan?
Potongan Separa dalam C 17
Pada masa ini, CTAD memerlukan semua atau tiada spesifikasi hujah templat. Walau bagaimanapun, terdapat percubaan untuk memperkenalkan potongan separa melalui cadangan seperti P1021R0. Walaupun cadangan ini belum diterima, sokongan untuk templat alias (P1814) dan agregat (P1816) telah dimasukkan ke dalam draf kerja C 20.
Penyelesaian
Dalam ketiadaan potongan separa asli, berikut ialah penyelesaian yang berpotensi:
<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>; // Usage void func() { NewBase2<bool, int> val(1, 2); }</code>
Dengan memperkenalkan NewBase2 sebagai alias untuk Base, anda boleh menentukan sebahagian argumen templat (T dan U) sambil membenarkan pengkompil membuat kesimpulan yang selebihnya satu (V) berdasarkan penggunaan dalam func().
Nota: Penyelesaian ini memerlukan penetapan argumen templat alias secara eksplisit, yang sedikit sebanyak mengalahkan tujuan CTAD.
Atas ialah kandungan terperinci Bolehkah C 17 Potong Sebahagian Argumen Templat dalam Potongan Hujah Templat Kelas (CTAD)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!