Bolehkah C Menyimpulkan Jenis Templat daripada Jenis Pemulangan Fungsi?

Mary-Kate Olsen
Lepaskan: 2024-11-06 12:23:02
asal
294 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Menggunakan fungsi ini, matlamat asal boleh dicapai seperti berikut :

<code class="cpp">GCPtr<A> p;
Allocate(p);</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!