Mengelakkan Halimunan Ahli dan Kembung Kod Sumber dengan Templat Kelas Diwarisi
Masalah yang dihadapi berlaku apabila templat kelas, CDerived, mewarisi daripada asas templat kelas, CBase dan semua ahli awam CBase menjadi tidak kelihatan kepada CDerived apabila kod disusun dengan pematuhan C standard didayakan.
Penyelesaian kepada Masalah:
Penyelesaian #1: Kelayakan Eksplisit
Rujukan awalan kepada ahli CBase dalam CDerived dengan CBase
Penyelesaian #2: this-> Awalan
Rujukan awalan kepada ahli CBase dengan ini->, mis., Fn1() menjadi ini->Fn1(). Ini juga menjadikan ahli kelihatan, tetapi sekali lagi memerlukan pengubahan kod verbose.
Penyelesaian #3: Menggunakan Penyata
Tambah menggunakan pernyataan di dalam CDerived untuk mengimport ahli CBase, mis., menggunakan CBase
Penyelesaian #4: Mod Permisif Bukan Standard
Lumpuhkan pematuhan C yang ketat dalam tetapan pengkompil untuk menyekat isu carian nama. Walau bagaimanapun, ini adalah penyelesaian global yang melepaskan diri daripada standard dan tidak mudah alih.
Penyelesaian yang Lebih Ringkas #5:
Untuk mengurangkan keterlaluan Penyelesaian # 3, makro boleh digunakan untuk menjana penyataan menggunakan yang diperlukan.
Pelaksanaan:
Sertakan perpustakaan prapemproses Boost dan tentukan makro, USING_ONE, untuk menjana satu penggunaan pernyataan untuk ahli asas tertentu.
Tentukan makro lain, USING_ALL, untuk menjana urutan penggunaan pernyataan untuk semua ahli asas yang ditentukan.
Dalam templat kelas asas, tentukan makro, USING_CBASE, untuk menjana pernyataan penggunaan untuk semua ahli yang dilindungi dan awam yang akan digunakan dalam templat kelas terbitan.
Dalam templat kelas terbitan, gunakan makro USING_CBASE yang sesuai untuk mengimport ahli yang diperlukan menggunakan makro yang ditakrifkan sebelum ini. Proses ini memerlukan carian dan menaip yang minimum, mengurangkan kelebihan kod sumber sambil mengekalkan kemudahalihan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Kehaliman Ahli dan Kembung Kod Sumber dalam Templat Kelas Diwarisi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!