Menentukan Kelengkapan Jenis dengan Templat Tersuai
Jenis yang tidak lengkap, walaupun tidak ditakrifkan sepenuhnya, memainkan peranan penting dalam pengaturcaraan C. Walau bagaimanapun, menentukan sama ada sesuatu jenis itu lengkap boleh menjadi mencabar, terutamanya dengan kekurangan templat khusus seperti Boost's is_complete.
Cadangan Penyelesaian
Walaupun penyelesaian universal yang sepenuhnya mematuhi Peraturan Satu Definisi (ODR) mungkin sukar difahami, pendekatan khusus platform telah terbukti berkesan untuk Microsoft Visual C . Seperti yang digariskan oleh Alexey Malistov, templat berikut boleh digunakan:
<code class="cpp">namespace { template<class T, int discriminator> struct is_complete { static T & getT(); static char (& pass(T))[2]; static char pass(...); static const bool value = sizeof(pass(getT()))==2; }; }</code>
Penggunaan
Untuk memanfaatkan templat ini, hanya gunakan makro IS_COMPLETE(X), di mana X ialah jenis yang dimaksudkan. Contohnya:
<code class="cpp">#define IS_COMPLETE(X) is_complete<X,__COUNTER__>::value</code>
Kaveat
Adalah penting untuk ambil perhatian bahawa makro __COUNTER__ bukan sebahagian daripada standard C. Oleh itu, penyelesaian ini mungkin tidak sesuai untuk semua penyusun.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Kelengkapan Jenis dalam C tanpa Templat Universal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!