Rumah >pembangunan bahagian belakang >C++ >Mengapa Fungsi Ahli Kelas Templat Memerlukan Kata Kunci `template` Apabila Dipanggil daripada Fungsi Templat?

Mengapa Fungsi Ahli Kelas Templat Memerlukan Kata Kunci `template` Apabila Dipanggil daripada Fungsi Templat?

DDD
DDDasal
2024-11-02 07:31:29648semak imbas

Why Do Member Functions of Template Classes Require the `template` Keyword When Called from Template Functions?

Fungsi Ahli Kelas Templat: Seruan daripada Fungsi Templat

Dalam C , ralat kompilasi yang pelik timbul apabila cuba memanggil fungsi ahli kelas templat dari dalam fungsi templat tanpa menyatakan kata kunci templat secara eksplisit. Pertimbangkan kod berikut:

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

template<class T> void g() {
    A<T> a;
    a.f<3>();  // Error!
}

Pengkompil menghadapi ralat pada Baris 18, menunjukkan bahawa nama fungsi ahli tidak dikenali. Ini kerana, seperti yang dinyatakan dalam Piawaian C (14.2/4), nama pengkhususan templat ahli mesti diawali dengan kata kunci templat apabila digunakan dalam senario tertentu.

Untuk membetulkan isu, cuma ubah suai kod untuk memasukkan kata kunci templat secara eksplisit:

template<class T> void g() {
    A<T> a;
    a.template f<3>();  // Add `template` keyword here
}

Kod yang dikemas kini berjaya disusun kerana ia mematuhi keperluan standard, menyatakan bahawa nama templat ahli mesti memenuhi syarat dengan kata kunci templat apabila digunakan dalam konteks sesuatu fungsi templat.

Atas ialah kandungan terperinci Mengapa Fungsi Ahli Kelas Templat Memerlukan Kata Kunci `template` Apabila Dipanggil daripada Fungsi Templat?. 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