Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Invokasi Fungsi Ahli Templat Dalam Fungsi Templat Gagal dalam C ?

Mengapakah Invokasi Fungsi Ahli Templat Dalam Fungsi Templat Gagal dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 02:57:30925semak imbas

Why Does Template Member Function Invocation Within a Template Function Fail in C  ?

Invokasi Fungsi Ahli Templat dalam Fungsi Templat

Dalam kod yang diberikan, percubaan untuk menggunakan fungsi ahli templat f dalam fungsi templat g gagal dengan ralat penyusunan:

<code class="cpp">template<class X> struct A {
   template<int I> void f() {}
};

template<class T> void g()
{
   A<T> a;
   a.f<3>();  // Compilation fails here (Line 18)
}</code>

Menurut Piawaian C (14.2/4), apabila pengkhususan templat ahli dipanggil selepas ., kata kunci templat mesti dinyatakan secara eksplisit untuk membezakannya daripada bukan- fungsi ahli templat.

Untuk menyelesaikan ralat penyusunan, kod hendaklah diubah suai seperti berikut:

<code class="cpp">template<class T> void g()
{
   A<T> a;
   a.template f<3>();  // add `template` keyword here
}</code>

Dengan menambah kata kunci templat, pengkompil mengiktiraf bahawa fungsi yang digunakan ialah templat ahli pengkhususan, menyelesaikan kekaburan dan membenarkan kod untuk disusun dengan jayanya.

Atas ialah kandungan terperinci Mengapakah Invokasi Fungsi Ahli Templat Dalam Fungsi Templat Gagal dalam C ?. 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