Bagaimanakah Fungsi Templat Boleh Diluluskan sebagai Argumen dalam C?

Patricia Arquette
Lepaskan: 2024-11-02 13:10:02
asal
949 orang telah melayarinya

How Can Template Functions be Passed as Arguments in C  ?

Fungsi Templat sebagai Argumen Templat Dijelaskan

Dalam C , pengaturcaraan generik boleh dicapai menggunakan penunjuk fungsi atau templat. Templat menawarkan kecekapan kerana ia membenarkan pengkompil untuk menyelaraskan fungsi, yang membawa kepada prestasi yang lebih baik.

Pertimbangkan senario di mana dua fungsi, a dan b, melakukan operasi yang serupa tetapi dengan sedikit variasi. Untuk mengelakkan pertindihan kod, fungsi generik boleh ditakrifkan menggunakan templat:

<code class="c++">template<void (*param)(int)>
void function() {
    param(123);
    param(456);
}</code>
Salin selepas log masuk

Templat ini mengambil penunjuk fungsi sebagai hujah, membenarkan pemilihan masa jalan bagi fungsi tertentu dilaksanakan. Dalam contoh, fungsi<> boleh dipanggil dengan sama ada a atau b sebagai hujah.

Fungsi Templat dengan Argumen Templat

Walau bagaimanapun, had timbul apabila a dan b ialah fungsi generik sendiri. Parameter templat boleh berupa jenis, jenis templat atau nilai, tiada satu pun daripadanya menyokong secara langsung fungsi templat sebagai argumen.

Untuk mengatasi cabaran ini, seseorang boleh menggunakan "parameter templat templat." Walau bagaimanapun, menggunakan fungsi templat sebagai jenis memerlukan instantiasi, menjadikannya tidak praktikal. Penyelesaian melibatkan penggunaan struktur tiruan:

<code class="c++">struct a { static void foo () {}; };
struct b { static void foo () {}; };

template <template <typename P> class T>
void function ()
{
    T<SomeObj>::foo ();
    T<SomeOtherObj>::foo ();
}

int main ()
{
    function<a>();
    function<b>();
}</code>
Salin selepas log masuk

Dalam contoh ini, a dan b dikapsulkan sebagai fungsi ahli statik dalam struct. fungsi mengambil struct templat sebagai hujah, pada dasarnya mewakili fungsi templat yang akan digunakan. Dengan melepasi struct ini, fungsi foo khusus boleh dilaksanakan untuk jenis yang berbeza.

Oleh itu, pendekatan ini membolehkan untuk mentakrifkan fungsi generik yang boleh menerima fungsi templat sebagai hujah, membolehkan kod fleksibel dan boleh digunakan semula dalam generik C.

Atas ialah kandungan terperinci Bagaimanakah Fungsi Templat Boleh Diluluskan sebagai Argumen 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