Pengkhususan Eksplisit Fungsi Templat dalam Kelas Templat
Dalam C , pengkhususan eksplisit fungsi templat dalam kelas templat boleh menjadi rumit isu sintaks. Pertimbangkan coretan kod berikut:
struct tag {}; template< typename T > struct C { template< typename Tag > void f( T ); // declaration only template<> inline void f< tag >( T ) {} // ERROR: explicit specialization in non-namespace scope };
Dalam contoh ini, pengkompil menimbulkan ralat apabila cuba mengkhususkan fungsi ahli f secara eksplisit dengan teg teg. Untuk menyelesaikan isu ini, pengkhususan eksplisit perlu dipindahkan ke luar kelas, tetapi sintaks yang sesuai tidak serta-merta jelas.
Penyelesaian yang disediakan mencadangkan menggunakan struct pembantu dengan fungsi ahli statik untuk memajukan panggilan kepada ahli khusus fungsi:
template<class T, class Tag> struct helper { static void f(T); }; template<class T> struct helper<T, tag1> { static void f(T) {} }; template<class T> struct C { // ... template<class Tag> void foo(T t) { helper<T, Tag>::f(t); } };
Dengan pendekatan ini, pengkhususan eksplisit terkandung dalam struktur tidak bersarang, memenuhi keperluan untuk sintaks pengkhususan eksplisit.
Atas ialah kandungan terperinci Bagaimana Mengkhususkan Fungsi Templat Secara Eksplisit Dalam Kelas Templat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!