Rumah >pembangunan bahagian belakang >C++ >Bolehkah C Menyimpulkan Jenis Templat daripada Jenis Pemulangan Fungsi?

Bolehkah C Menyimpulkan Jenis Templat daripada Jenis Pemulangan Fungsi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 12:23:02355semak imbas

Can C   Deduce Template Types from Function Return Types?

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!

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