Rumah >pembangunan bahagian belakang >C++ >Bilakah Kata Kunci `typename` Diperlukan dalam Templat C?

Bilakah Kata Kunci `typename` Diperlukan dalam Templat C?

Susan Sarandon
Susan Sarandonasal
2024-12-27 22:51:10442semak imbas

When is the `typename` Keyword Necessary in C   Templates?

Bilakah kata kunci "typename" diperlukan?

Dalam C , kata kunci "typename" digunakan untuk menyahkekaburan nama bersarang yang bergantung pada parameter templat.

Mengapa "nama taip" diperlukan dalam contoh kod?

Kod contoh mentakrifkan kelas C dengan struct bersarang P. Di dalam fungsi ahli f(), baris:

typename vector<P>::iterator p = vec.begin();

memerlukan penggunaan "typename " kerana:

  • Nama bergantung: vektor

    ialah nama bersarang yang bergantung pada parameter templat K kelas C.

  • Kekaburan: Tanpa "typename", pengkompil tidak dapat menentukan sama ada vector

    ::iterator ialah jenis atau templat.

Kes lain di mana "nama taip" adalah perlu:

"typename" juga diperlukan dalam situasi berikut:

  • Merujuk fungsi ahli bergantung:
template<typename T>
class A {
public:
    void f(typename T::P& p); // Requires "typename"
};
  • Merujuk kepada sarang tanggungan templat:
template<typename T>
class A {
public:
    template<typename U>
    void g(typename T::template F<U>& f); // Requires "typename"
};
  • Merujuk pengkhususan templat bergantung:
template<typename T>
class A {
public:
    template<>
    void g<int>(typename T::F<int>& f); // Requires "typename"
};

Secara amnya, bila-bila masa anda perlu merujuk kepada nama bersarang bergantung, kata kunci "typename" diperlukan untuk menyahkekaburan jenis daripada templat.

Atas ialah kandungan terperinci Bilakah Kata Kunci `typename` Diperlukan dalam Templat 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