Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengkhususan Separa Ahli Fungsi Templat Menyebabkan 'Penggunaan Jenis Tidak Lengkap' tidak sah?

Mengapa Pengkhususan Separa Ahli Fungsi Templat Menyebabkan 'Penggunaan Jenis Tidak Lengkap' tidak sah?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 02:17:09897semak imbas

Why Does Partial Specialization of a Template Function Member Cause

Ralat "Penggunaan Jenis Tidak Lengkap" dalam Pengkhususan Templat Separa

Apabila cuba mencipta pengkhususan separa fungsi templat dengan sintaks :

template <typename T>
void foo<int, T>::bar() {
}

anda mungkin menerima ralat "penggunaan tidak sah jenis tidak lengkap 'struct foo'." Ini berlaku kerana C memerlukan anda mengkhususkan sebahagian keseluruhan templat apabila mengkhususkan fungsi ahli.

Untuk menyelesaikannya, nyatakan tandatangan templat lengkap apabila sebahagiannya mengkhususkan kelas:

template <typename S, typename T>
struct foo {
   void bar();
};

template <>
struct foo<int, T> {
   void bar() {
   }
};

Sebagai alternatif, anda boleh menggunakan penyelesaian seperti mencipta struct templat bersarang atau mendapatkan daripada templat lain yang sebahagiannya pakar.

Nota: Ini terpakai hanya untuk pengkhususan separa fungsi ahli. Mengkhususkan sepenuhnya fungsi templat tidak memerlukan pengkhususan keseluruhan templat.

Atas ialah kandungan terperinci Mengapa Pengkhususan Separa Ahli Fungsi Templat Menyebabkan 'Penggunaan Jenis Tidak Lengkap' tidak sah?. 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