Rumah > pembangunan bahagian belakang > C++ > Mengapa Kami Tidak Dapat Menyimpulkan Sebahagian Argumen Templat untuk Templat Kelas?

Mengapa Kami Tidak Dapat Menyimpulkan Sebahagian Argumen Templat untuk Templat Kelas?

Barbara Streisand
Lepaskan: 2024-11-08 21:13:02
asal
330 orang telah melayarinya

Why Can't We Partially Deduce Template Arguments for Class Templates?

Potongan Argumen Templat Separa untuk Templat Kelas: Dilawati Semula

Walaupun terdapat usaha yang digariskan dalam P0091 untuk menyatukan gelagat templat fungsi dan kelas, kemungkinan potongan hujah separa dalam templat kelas masih sukar difahami. Perbincangan ini menjelaskan batasan semasa dan meneroka kemungkinan sebab di sebaliknya.

Pertimbangkan ujian templat kelas dan pembantu fungsi pembantunya. Walaupun pembantu membenarkan potongan separa, seperti yang ditunjukkan oleh kod yang disediakan, ujian templat kelas yang sepadan tidak.

template<std::size_t S, typename T>
struct test {
    static constexpr auto size = S;
    using type_t = T;
    test(type_t(&&input)[size]) : data(input) {}
    type_t(&&data)[size]{};
};
Salin selepas log masuk
template<std::size_t S, typename T>
test<S, T> helper(T(&&input)[S]) { return input; }
Salin selepas log masuk

Setelah percubaan, menjadi jelas bahawa pemotongan templat kelas hanya berlaku apabila semua hujah secara eksplisit disediakan. Penyimpangan daripada tingkah laku yang dijangkakan ini menimbulkan persoalan sama ada terdapat salah faham dalam tafsiran P0091.

Seperti yang dicadangkan oleh laporan perjalanan Botond Ballo, potongan separa untuk templat kelas telah dicadangkan dan kemudiannya ditarik balik kerana kebimbangan mengenai kekeliruan. . Sebagai contoh, kod berikut akan menyebabkan potongan kepada tuple, tetapi tuple ialah jenis yang sah dengan sendirinya:

tuple<int> t(42, "waldo", 2.0f);
Salin selepas log masuk

Untuk mengelakkan kekaburan tersebut, set lengkap hujah templat mesti disediakan untuk templat kelas, manakala potongan separa kekal sebagai pilihan untuk templat fungsi.

Atas ialah kandungan terperinci Mengapa Kami Tidak Dapat Menyimpulkan Sebahagian Argumen Templat untuk Templat Kelas?. 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