Typedef Tidak Diiktiraf dalam Templat Kelas Terbitan
Apabila mengisytiharkan templat kelas terbitan B yang mewarisi daripada templat kelas asas A, adalah dijangkakan bahawa typedef yang ditakrifkan dalam A akan boleh diakses dalam B. Walau bagaimanapun, dalam contoh yang diberikan, mengakses Vec_t dalam B gagal dengan ralat bahawa ia tidak diiktiraf.
Menurut Piawaian C (14.6.2/3), dalam definisi templat kelas dan takrif ahli, pencarian nama yang tidak layak tidak dilanjutkan ke kelas asas yang bergantung pada parameter templat. Ini bermakna akses tidak layak kepada typedef yang ditakrifkan dalam kelas asas tidak dibenarkan dalam templat kelas terbitan.
Untuk menyelesaikan isu ini, nama penuh typedef mesti digunakan dalam templat kelas terbitan. Ini boleh dicapai dengan menyatakan secara eksplisit skop kelas asas seperti berikut:
typename A<T>::Vec_t v;
Dengan melayakkan nama secara eksplisit dengan skop kelas asas, pengkompil boleh menyelesaikan dengan betul rujukan kepada typedef Vec_t yang ditakrifkan dalam kelas asas templat.
Atas ialah kandungan terperinci Mengapa typedef saya dalam templat kelas asas tidak boleh diakses dalam templat kelas terbitan saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!