Invokasi Fungsi Ahli Templat dalam Fungsi Templat
Coretan kod yang disediakan menunjukkan ralat yang dihadapi semasa menggunakan fungsi ahli templat dari dalam fungsi templat :
<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 }</code>
Pengkompil gagal untuk menyusun kod ini, melaporkan ralat berkaitan kepada penggunaan ahli yang tidak sah dan mencadangkan bahawa '&' mungkin telah dilupakan.
Penjelasan
Ralat berlaku kerana kod cuba menggunakan templat ahli tanpa secara eksplisit menyatakan kata kunci 'template' sebelum itu. Menurut C Standard (14.2/4), apabila nama pengkhususan templat ahli digunakan selepas titik atau anak panah dalam ungkapan postfix, atau selepas penentu nama bersarang dalam id yang layak dan ungkapan postfix atau qualified-id secara eksplisit bergantung pada parameter template, nama template ahli mesti diawali dengan kata kunci 'template.' Jika tidak, nama itu akan diandaikan merujuk kepada bukan templat.
Penyelesaian
Untuk menyelesaikan isu ini, kod mesti diubah suai untuk menyatakan secara eksplisit 'templat ' kata kunci sebelum nama templat ahli:
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add 'template' keyword here }</code>
Dengan pengubahsuaian ini, pengkompil akan dapat mengenal pasti dengan betul dan gunakan fungsi templat ahli, dan kod akan berjaya disusun.
Atas ialah kandungan terperinci Mengapa pengkompil gagal untuk menyusun apabila menggunakan fungsi ahli templat dalam fungsi templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!