Pengkhususan Eksplisit Fungsi Templat dalam Kelas Templat: Syntax Conundrum dalam C
Coretan kod yang diberikan menunjukkan teka-teki pengaturcaraan yang timbul apabila cuba untuk secara eksplisit mengkhususkan fungsi templat dalam kelas templat. Dalam Microsoft Visual C 2008 (VC9), kod berjaya disusun; namun, kod yang sama menghadapi ralat apabila disusun menggunakan GCC 4.2 pada Mac.
GCC memerlukan pengkhususan eksplisit untuk diisytiharkan di luar kelas, tetapi sintaks yang betul untuk berbuat demikian tidak jelas. Percubaan awal untuk meletakkan pengkhususan eksplisit di luar kelas, seperti yang ditunjukkan di bawah, adalah tidak betul:
template< typename T > template<> inline void C< T >::f< tag >( T ) {}
Pendekatan yang betul melibatkan pemajuan panggilan kepada fungsi ahli daripada jenis separa khusus. Berikut ialah kod yang diperbetulkan:
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); } };
Pengubahsuaian ini memperkenalkan struktur pembantu yang menyediakan kefungsian yang diingini sambil mematuhi keperluan sintaks GCC. Dengan mengasingkan pengkhususan eksplisit daripada kelas itu sendiri, kod tersebut berjaya disusun dan berfungsi seperti yang diharapkan.
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!