Potongan Templat Berdasarkan Jenis Pemulangan Fungsi dalam C
Dalam C , adalah wajar untuk menggunakan potongan templat untuk memudahkan kod yang menunjukkan generik fungsi berdasarkan jenis data argumen fungsi. Pertimbangkan contoh berikut:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate(); GCPtr<B> ptr2 = GC::Allocate();</code>
Daripada menentukan parameter jenis generik secara eksplisit, matlamatnya ialah untuk mencapai potongan ini menggunakan jenis pulangan fungsi GC::Allocate(). Walau bagaimanapun, C tidak membenarkan potongan jenis berdasarkan jenis pulangan.
<code class="cpp">class GC { public: template<typename T> static GCPtr<T> Allocate(); };</code>
Walaupun jenis pulangan adalah generik, pengkompil memerlukan spesifikasi eksplisit bagi parameter jenis templat dan apabila menghidupkan fungsi GC::Allocate().
Untuk mengurangkan had ini, fungsi tambahan boleh diperkenalkan:
<code class="cpp">template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); }</code>
Menggunakan fungsi ini, matlamat asal boleh dicapai seperti berikut :
<code class="cpp">GCPtr<A> p; Allocate(p);</code>
Sama ada sintaks ini menawarkan sebarang kelebihan ketara berbanding spesifikasi jenis eksplisit adalah subjektif.
Nota: Dalam C 11, adalah mungkin untuk meninggalkan salah satu daripada pengisytiharan jenis menggunakan kata kunci auto:
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
Atas ialah kandungan terperinci Bolehkah C Menyimpulkan Jenis Templat daripada Jenis Pemulangan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!