Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Fungsi Templat Boleh Diluluskan sebagai Argumen dalam C?

Bagaimanakah Fungsi Templat Boleh Diluluskan sebagai Argumen dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-02 13:10:02950semak imbas

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>

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>

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!

Kenyataan:
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