Rumah >pembangunan bahagian belakang >C++ >Mengapakah GCC Memerlukan Akses Ahli Eksplisit untuk Ahli Kelas Asas Templat?
Penguatkuasaan Tegas Ketergantungan Argumen Templat GCC
Kod yang dibentangkan menimbulkan isu yang berlaku apabila menggunakan GCC, tetapi tidak dengan Visual Studio. Kod berikut:
<code class="cpp">template <typename T> class A { public: T foo; }; template <typename T> class B: public A<T> { public: void bar() { cout << foo << endl; } };
gagal untuk menyusun dengan GCC, tetapi berjaya menyusun dengan Visual Studio. Ralat menggesa pembangun untuk menambah ini-> kepada ungkapan untuk mengakses ahli foo dalam bar kaedah.
Tingkah laku ini berpunca daripada pematuhan ketat GCC kepada spesifikasi C. Versi terdahulu GCC membuat kesimpulan akses ahli daripada kelas asas templat dengan menghuraikannya. Walau bagaimanapun, ISO C menganggap inferens ini berpotensi bermasalah dan telah menafikannya.
Penyelesaian dalam senario ini adalah dengan merujuk secara eksplisit ahli foo menggunakan ini-> atau untuk menentukan kelas asas secara eksplisit, seperti yang ditunjukkan dalam contoh berikut:
<code class="cpp">template <typename T> class A { public: T foo; }; template <typename T> class B: public A<T> { public: void bar() { cout << A<T>::foo << endl; } };</code>
Dengan berbuat demikian, GCC boleh menentukan jenis kelas asas dan menyelesaikan akses ahli dengan sewajarnya.
Atas ialah kandungan terperinci Mengapakah GCC Memerlukan Akses Ahli Eksplisit untuk Ahli Kelas Asas Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!