Mengapa Kami Tidak Boleh Mendapat Potongan Hujah Templat Kelas Separa?

Barbara Streisand
Lepaskan: 2024-11-18 05:15:02
asal
150 orang telah melayarinya

Why Can't We Have Partial Class Template Argument Deduction?

Potongan Argumen Templat Kelas Separa: Mengapa Ia Tidak Mungkin

Usaha sebelum ini untuk memperkenalkan potongan hujah templat untuk templat kelas yang bertujuan untuk menyelaraskan gelagatnya dengan templat fungsi. Walau bagaimanapun, keluaran cadangan P0091 menunjukkan had utama: potongan hujah templat kelas separa kekal mustahil.

Pertimbangkan contoh yang disediakan, di mana ujian templat kelas ditentukan. Pembantu fungsi pembantu memudahkan penciptaan objek ujian, seperti yang terbukti dalam coretan kod di mana pelbagai bentuk potongan hujah ditunjukkan.

Semasa kod menyusun dalam kebanyakan kes, kesukaran timbul apabila mencuba potongan separa untuk templat kelas. Sebagai contoh, baris 6 kod berikut gagal untuk menyusun:

int buffer[5];

test<5> b(buffer);      // Type deduced: FAILS.
Salin selepas log masuk

Ini berlaku kerana pengkompil tidak dapat menentukan jenis parameter T. Tanpa spesifikasi yang jelas, pengkompil menjangkakan semua argumen templat disimpulkan secara serentak . Ini menimbulkan cabaran, kerana setiap proses pemotongan parameter boleh memberi kesan kepada potongan yang lain.

Laporan oleh Botond Ballo menyerlahkan rasional di sebalik pengehadan ini:

Ciri seperti yang dicadangkan pada asalnya disertakan peruntukan untuk potongan separa, di mana anda menyatakan dengan jelas beberapa hujah templat dan membiarkan selebihnya disimpulkan, tetapi ini telah ditarik balik kebimbangan bahawa ia boleh menjadi sangat mengelirukan dalam beberapa kes:

// Would have deduced tuple<int, string, float>,
// but tuple<int> is a well-formed type in and of itself!
tuple<int> t(42, "waldo", 2.0f);
Salin selepas log masuk

Oleh itu, sementara templat fungsi membenarkan potongan hujah separa, kekaburan yang diperkenalkan oleh potongan separa dalam templat kelas membawa kepada pengecualiannya.

Atas ialah kandungan terperinci Mengapa Kami Tidak Boleh Mendapat Potongan Hujah Templat Kelas Separa?. 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