Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengkhususkan Fungsi Templat secara Eksplisit dalam Kelas Templat dalam C?

Bagaimana Mengkhususkan Fungsi Templat secara Eksplisit dalam Kelas Templat dalam C?

Susan Sarandon
Lepaskan: 2024-11-26 16:59:09
asal
462 orang telah melayarinya

How to Correctly Explicitly Specialize Template Functions within Template Classes in C  ?

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

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

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!

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