Bekas C terkenal melarang instantiasi dengan jenis yang tidak lengkap. Pustaka kontena Boost memintas sekatan ini, menimbulkan persoalan tentang tujuan dan potensi kelemahannya.
Rasional untuk Sekatan
Secara sejarah, jawatankuasa penyeragaman C mendapati gelagat pelaksanaan yang berbeza-beza dengan tidak lengkap jenis merentas pelaksanaan STL yang berbeza. Untuk memastikan keserasian dan mengelakkan kekeliruan, mereka secara jelas melarang jenis tidak lengkap dalam bekas perpustakaan standard.
Potensi Kelemahan Membenarkan Jenis Tidak Lengkap
Walaupun membenarkan jenis tidak lengkap mungkin mendayakan struktur data lanjutan , ia juga boleh menimbulkan isu masa jalan. Jenis yang tidak lengkap kekurangan maklumat yang diperlukan, menyukarkan bekas untuk mengurus peruntukan memori dan seumur hidup objek.
Kemungkinan Masa Hadapan
Jawatankuasa C telah mengakui potensi manfaat membenarkan yang tidak lengkap jenis. Pada tahun 2002, pengerusi kumpulan kerja perpustakaan membayangkan bahawa sekatan ini mungkin dilonggarkan dalam versi C masa hadapan. Walau bagaimanapun, setakat piawaian semasa, larangan itu kekal.
Penyelesaian Boost
Menyedari batasan pendekatan standard, pembangun Boost mencipta bekas mereka sendiri yang mampu bekerja dengan jenis yang tidak lengkap. Ini membolehkan penciptaan struktur data rekursif yang sebaliknya mustahil dengan pustaka standard.
C 17 Elaun Separa
C 17 memperkenalkan kelonggaran separa sekatan ini untuk tertentu bekas, membenarkan penggunaan jenis tidak lengkap untuk jenis yang diisytiharkan ke hadapan dalam jenis elemen atau jenis kunci bekas. Elaun terhad ini meningkatkan keserasian dengan beberapa corak pengaturcaraan moden sambil mengekalkan kestabilan dengan pelaksanaan sedia ada.
Atas ialah kandungan terperinci Mengapa Bekas C Standard Tidak Boleh Menggunakan Jenis Tidak Lengkap, dan Apakah Penyelesaiannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!