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
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!