Fungsi Ahli Kelas Templat: Seruan daripada Fungsi Templat
Dalam C , ralat kompilasi yang pelik timbul apabila cuba memanggil fungsi ahli kelas templat dari dalam fungsi templat tanpa menyatakan kata kunci templat secara eksplisit. Pertimbangkan kod berikut:
template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Error! }
Pengkompil menghadapi ralat pada Baris 18, menunjukkan bahawa nama fungsi ahli tidak dikenali. Ini kerana, seperti yang dinyatakan dalam Piawaian C (14.2/4), nama pengkhususan templat ahli mesti diawali dengan kata kunci templat apabila digunakan dalam senario tertentu.
Untuk membetulkan isu, cuma ubah suai kod untuk memasukkan kata kunci templat secara eksplisit:
template<class T> void g() { A<T> a; a.template f<3>(); // Add `template` keyword here }
Kod yang dikemas kini berjaya disusun kerana ia mematuhi keperluan standard, menyatakan bahawa nama templat ahli mesti memenuhi syarat dengan kata kunci templat apabila digunakan dalam konteks sesuatu fungsi templat.
Atas ialah kandungan terperinci Mengapa Fungsi Ahli Kelas Templat Memerlukan Kata Kunci `template` Apabila Dipanggil daripada Fungsi Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!