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; };
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 };
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;
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!