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
Barbara Streisandasal
2024-11-08 21:13:02332semak imbas

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]{};
};
template<std::size_t S, typename T>
test<S, T> helper(T(&&input)[S]) { return input; }

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);

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!

Kenyataan:
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