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!