Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat
Sebagai tindak balas kepada pertanyaan berkenaan kebolehaksesan berubah dalam kelas induk templat, adalah penting untuk menjelaskan bahawa pengkompil GNU C moden, bermula dari versi 3.4.6, mematuhi piawaian C dengan ketat. Ia menentukan bahawa nama yang tidak layak dalam templat selalunya tidak bergantung. Akibatnya, menyelesaikan nama-nama ini pada masa definisi templat menjadi tidak dapat dilaksanakan kerana sifat pengkhususan kelas asas bergantung yang tidak diketahui, seperti dalam coretan kod yang disediakan:
template<class T> class Foo { public: Foo() { a = 1; } protected: int a; }; template<class T> class Bar : public Foo<T> { public: Bar() { b = 4; }; int Perna(int u); protected: int b; }; template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // This works return (a + b) * u; // This doesn't }
Tingkah laku ini berpunca daripada keperluan untuk mengenal pasti nama yang tidak layak semasa definisi templat, yang tidak mungkin untuk kelas asas bergantung kerana potensi pengkhususan masa hadapan. Oleh itu, percubaan untuk mengakses pembolehubah dilindungi 'a' tidak layak dalam kaedah 'Perna' 'Bar' akan mengakibatkan ralat.
Untuk memintas pengehadan ini, perlu menggunakan nama layak 'Foo Selain itu, nama fungsi tidak layak yang diisytiharkan dalam kelas asas juga tertakluk kepada sekatan ini. Untuk mengakses fungsi sedemikian, seseorang mesti sama ada menggunakan nama yang layak atau memberikan pengisytiharan 'menggunakan'. Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Pembolehubah Diwarisi daripada Kelas Induk Templat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!using Foo<T>::a;
int c = a * 4; // Now valid