Mengelakkan Kehadiran Ahli Awam dan Pengulangan Kod Sumber dengan Templat Kelas Diwarisi
Dalam pengaturcaraan berorientasikan objek, warisan membenarkan kelas mewarisi sifat dan kaedah daripada kelas induk mereka. Walau bagaimanapun, apabila templat kelas diperkenalkan, ahli awam mungkin menjadi tidak boleh diakses oleh kelas terbitan kerana pematuhan standard C yang ketat. Isu ini boleh membawa kepada masalah apabila cuba merujuk ahli awam dalam kelas terbitan.
Empat penyelesaian sedia ada untuk masalah ini telah dicadangkan:
Walaupun penyelesaian ini mungkin menangani isu kebolehaksesan, penyelesaian ini mempunyai potensi kelemahan, seperti kod verbose, panggilan maya yang disekat dan bukan mudah alih.
Cadangan Penyelesaian Dipertingkat
Untuk menambah baik penyelesaian sedia ada, adalah mungkin untuk memanfaatkan makro untuk memudahkan Penyelesaian #3:
<code class="c++">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) \ using base::member; #define USING_ALL(base, ...) \ BOOST_PP_SEQ_FOR_EACH(\ USING_ONE, base, \ BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) \ ) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES>, in a `public:` section USING_CBASE(BYTES);</code>
Pendekatan ini memerlukan penambahan makro USING_CBASE berhampiran takrif CBase
Penyelesaian ini menangani kebimbangan Penyelesaian #3, seperti kod berulang, dengan merangkum pernyataan penggunaan ke dalam makro. Ia juga mengekalkan kemudahalihan dengan mematuhi piawaian C. Penyelesaian yang dipertingkat ini menyediakan cara yang lebih ringkas dan cekap untuk mengelakkan halimunan ahli awam dan pengulangan kod sumber dalam templat kelas yang diwarisi.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Halimunan Ahli Awam dan Pengulangan Kod Sumber dalam Templat Kelas Diwarisi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!