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
Lepaskan: 2024-11-02 07:31:29
asal
670 orang telah melayarinya

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan