Cara Menggunakan Pembina Templat Eksplisit Menggunakan Senarai Pemula
Soalan:
Boleh templat eksplisit pembina digunakan menggunakan senarai pemula, seperti yang dilihat dalam berikut contoh?
struct T { template<class> T(); }; struct U { U() : t<void>() {} //does not work T t; };
Jawapan:
Malangnya, tidak mungkin untuk menggunakan pembina templat secara eksplisit menggunakan senarai pemula.
Menurut C Standard pada 14.8.1/7, "[...] kerana templat fungsi ahli penukaran dan templat fungsi ahli pembina dipanggil tanpa menggunakan nama fungsi, tiada cara untuk menyediakan senarai hujah templat eksplisit untuk templat fungsi ini."
Ini bermakna pembina, yang tidak mempunyai nama mereka sendiri, tidak boleh menerima hujah templat secara eksplisit. Dalam kes anda, pengkompil mentafsir t
Untuk menangani isu ini, anda boleh menggunakan penyelesaian:
struct T { template<class U> T(identity<U>); }; struct U { U() : t(identity<void>()) {} T t; };
Di sini, identiti bertindak sebagai pemegang tempat untuk parameter templat . Dalam C 20, anda boleh menggunakan std::type_identity sebagai jenis identiti.
Atas ialah kandungan terperinci Bolehkah Pembina Templat Eksplisit Dikenakan Menggunakan Senarai Pemula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!