Bagaimana untuk Menentukan Kelengkapan Jenis dalam C tanpa Templat Universal?

Patricia Arquette
Lepaskan: 2024-10-30 17:15:03
asal
436 orang telah melayarinya

 How to Determine Type Completeness in C   without a Universal Template?

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 &amp; getT();   
      static char (&amp; pass(T))[2]; 
      static char pass(...);   
      static const bool value = sizeof(pass(getT()))==2;
    };
}</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!