Menggunakan Parameter Templat dalam C
Pertimbangkan senario di mana anda mempunyai berbilang fungsi, seperti a() dan b(), yang melaksanakan tugas yang serupa dengan pelaksanaan dalaman yang berbeza. Untuk mengelakkan lebihan kod, anda boleh mencipta fungsi generik menggunakan templat. Walau bagaimanapun, jika a() dan b() sendiri adalah generik, melaksanakan fungsi luar sebagai templat mungkin tidak mencukupi.
Dalam konteks ini, anda boleh menggunakan parameter templat templat. Walaupun templat lazimnya menerima jenis, parameter jenis templat atau nilai, anda tidak boleh menghantar terus fungsi templat sebagai jenis kerana ia memerlukan instantiasi.
Untuk mengatasinya, anda boleh menggunakan penyelesaian yang melibatkan struktur tiruan:
<code class="cpp">template <typename T> struct a { static void foo() {} }; template <typename T> struct b { static void foo() {} };</code>
Struktur ini bertindak sebagai pemegang tempat untuk parameter templat templat. Fungsi itu sendiri menjadi:
<code class="cpp">template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); }</code>
Kini anda boleh menggunakan fungsi generik dengan pelaksanaan foo() yang berbeza dengan menghantar templat struktur tiruan yang sesuai:
<code class="cpp">int main() { function<a>(); function<b>(); }</code>
Sementara penunjuk fungsi menyediakan penyelesaian yang lebih mudah dalam senario khusus ini, parameter templat templat menawarkan penyelesaian yang lebih umum untuk masalah yang memerlukan kefungsian generik dengan pelbagai pelaksanaan.
Atas ialah kandungan terperinci Bagaimanakah Parameter Templat Templat boleh Digunakan untuk Mencipta Fungsi Generik dengan Pelbagai Pelaksanaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!