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?

Mary-Kate Olsen
Lepaskan: 2024-11-27 17:46:14
asal
845 orang telah melayarinya

How to Explicitly Specialize a Template Function Within a Template Class in C  ?

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

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

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!

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