Rumah > pembangunan bahagian belakang > C++ > Bolehkah Pembina Templat Eksplisit Dikenakan Menggunakan Senarai Pemula?

Bolehkah Pembina Templat Eksplisit Dikenakan Menggunakan Senarai Pemula?

Mary-Kate Olsen
Lepaskan: 2024-12-02 16:56:10
asal
806 orang telah melayarinya

Can Explicit Template Constructors Be Invoked Using Initializer Lists?

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;
};
Salin selepas log masuk

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 sebagai jenis kelas asas, menyebabkan kod gagal.

Untuk menangani isu ini, anda boleh menggunakan penyelesaian:

struct T { 
    template<class U> T(identity<U>);
};

struct U {
    U() : t(identity<void>()) {}
    T t;
};
Salin selepas log masuk

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!

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