Rumah > Artikel > pembangunan bahagian belakang > Adakah Terdapat `template` Setara dalam C ?
Bolehkah Anda Meniru Templat
Keupayaan pengaturcaraan meta templat C membolehkan pembangun mencipta kod yang berkuasa dan cekap. Walau bagaimanapun, dalam senario tertentu, menghantar hujah kepada templat boleh menyusahkan. Pertimbangkan kod berikut:
<code class="cpp">struct Foo { template<class T, T X> void bar() { // do something with X, compile-time passed } }; struct Baz { void bang() {} }; int main() { Foo f; f.bar<int, 5>(); f.bar<decltype(&Baz::bang), &Baz::bang>(); }</code>
Dalam contoh ini, kita perlu menyatakan secara eksplisit jenis dan menghantar nilai sebenar sebagai argumen kepada bar templat.
Adakah mungkin untuk memudahkan sintaks ini ? Bolehkah kami menyatakannya seperti berikut:
<code class="cpp">struct Foo { template<auto X> void bar() { // do something with X, compile-time passed } }; struct Baz { void bang() {} }; int main() { Foo f; f.bar<5>(); f.bar<&Baz::bang>(); }</code>
Jawapannya:
Malangnya, C tidak menyediakan cara langsung untuk mencapai sintaks ini. Alternatif terdekat ialah makro:
<code class="cpp">#define AUTO_ARG(x) decltype(x), x f.bar<AUTO_ARG(5)>(); f.bar<AUTO_ARG(&Baz::bang)>();</code>
Alternatif Lain: Penjana
Jika anda sedang mencari cara untuk mengelak daripada menyatakan jenis secara eksplisit , fungsi penjana boleh menjadi penyelesaian yang berdaya maju:
<code class="cpp">template <typename T> struct foo { foo(const T&) {} // do whatever }; template <typename T> foo<T> make_foo(const T& x) { return foo<T>(x); }</code>
Daripada menulis:
<code class="cpp">foo<int>(5);</code>
Anda boleh menggunakan:
<code class="cpp">make_foo(5);</code>
Ini membenarkan jenis hujah untuk disimpulkan, memudahkan kod. Ambil perhatian bahawa pendekatan ini tidak secara langsung meniru templat
Atas ialah kandungan terperinci Adakah Terdapat `template` Setara dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!