Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mewarisi Alias ​​Jenis dengan Betul daripada Templat Kelas Asas kepada Templat Kelas Terbitan dalam C?

Bagaimanakah Saya Boleh Mewarisi Alias ​​Jenis dengan Betul daripada Templat Kelas Asas kepada Templat Kelas Terbitan dalam C?

Patricia Arquette
Lepaskan: 2024-12-02 02:34:11
asal
586 orang telah melayarinya

How Can I Properly Inherit Type Aliases from a Base Class Template to a Derived Class Template in C  ?

Menyebarkan Jenis Alias ​​daripada Kelas Asas kepada Terbitan untuk Templat

Dalam C , adalah perkara biasa untuk mentakrifkan alias jenis untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod . Walau bagaimanapun, apabila bekerja dengan templat kelas dan warisan, menyebarkan typedef daripada kelas asas kepada kelas terbitan memerlukan pendekatan khusus.

Andaikan kita mempunyai templat kelas asas A yang mengandungi typedef sahaja:

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};
Salin selepas log masuk

Sekarang, mari buat templat kelas B terbitan yang diwarisi A:

template<typename T>
class B : public A<T> {
private:
    Vec_t v;  // fails - Vec_t is not recognized
};
Salin selepas log masuk

Dalam kod ini, cubaan menggunakan Vec_t dalam kelas B terbitan menghasilkan ralat. Ini kerana carian nama yang layak untuk Vec_t tidak dilakukan semasa definisi templat kelas terbitan atau semasa instantiasi templat.

Untuk menyelesaikan isu ini, nama typedef yang layak sepenuhnya mesti digunakan dalam kelas terbitan:

typename A<T>::Vec_t v;
Salin selepas log masuk

Notasi ini menyatakan sepenuhnya skop typedef dan membenarkan ia disebarkan ke kelas terbitan.

Pada dasarnya, Piawaian C memerlukan skop kelas asas yang bergantung pada parameter templat tidak diperiksa semasa carian nama yang tidak layak. Sekatan ini memastikan bahawa resolusi typedef adalah konsisten dan boleh diramal merentas instansiasi templat kelas yang berbeza.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mewarisi Alias ​​Jenis dengan Betul daripada Templat Kelas Asas kepada Templat Kelas Terbitan dalam C?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan