Soalan ini menyelidiki kemungkinan melaksanakan binaan "static_warning" yang berfungsi serupa dengan static_assert tetapi hanya menghasilkan amaran semasa penyusunan dan bukannya ralat yang menghentikan penyusunan dengan serta-merta. Mari kita selami penerokaan dan jawab soalan.
Diinspirasikan oleh ulasan daripada Michael E, penyelesaian yang menarik melibatkan pengubahsuaian makro untuk memenuhi fungsi yang diingini:
makro:<code class="c++">#define STATIC_WARNING(cond, msg) struct PP_CAT(static_warning,__LINE__) { \ DEPRECATE(void _(const ::detail::false_type&),msg) {}; \ void _(const ::detail::true_type& ) {}; \ PP_CAT(static_warning,__LINE__)() {_(::detail::converter<(cond)>());} \ }</code>
Hasil
Apabila menyusun dengan tahap amaran yang sesuai, pengkompil akan mengeluarkan mesej amaran yang menyerupai tingkah laku yang dimaksudkan: "'_' ditamatkan:...Ini membolehkan maklumat masa jalan dan bantuan penyahpepijatan tanpa menamatkan penyusunan lebih awal. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa gelagat makro adalah khusus pengkompil dan pengkompil yang berbeza mungkin mengendalikannya secara berbeza.
Atas ialah kandungan terperinci Bolehkah Kami Membuat \'Amaran Statik\' Seperti `static_assert` tetapi dengan Amaran Daripada Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!