Dalam bidang struktur data, selalunya penting untuk mempertimbangkan sifat seperti saiz tetap lwn. berubah, data heterogen lwn homogen, data diisih lwn. tidak diisih, dan akses berjujukan lwn rawak. Walaupun pelbagai bekas STL wujud untuk menampung gabungan khusus sifat ini, jurang yang ketara kekal: kekurangan bekas yang menyokong saiz dan kepelbagaian pembolehubah secara serentak.
Dalam C , bekas biasanya memuatkan objek daripada satu jenis, terima kasih kepada kuasa templat. Untuk kes di mana jenis berbeza berkongsi kelas asas yang sama, seseorang boleh menggunakan bekas penunjuk ke kelas asas. Walau bagaimanapun, apakah pilihan yang tersedia apabila mengurus jenis yang tidak berkaitan sepenuhnya?
Untuk menangani cabaran ini, boost menawarkan dua perpustakaan serba boleh: boost::any dan boost::variant.
Menggunakan rangsangan:: mana-mana, seseorang boleh dengan mudah membuat bekas heterogen yang menyokong saiz berubah:
<code class="cpp">std::list<boost::any> values; append_int(values, 42); append_string(values, "Hello");</code>
boost::variant, sebaliknya, memastikan keselamatan jenis tetapi mengehadkan jenis yang boleh disimpan:
<code class="cpp">std::vector<boost::variant<unsigned, std::string>> vec; vec.push_back(44); vec.push_back("str"); vec.push_back(SomeOtherType(55, 65)); // Compilation error</code>
Perpustakaan ini memperkasakan pembangun C dengan keupayaan untuk mengendalikan heterogen data dalam cara yang serba boleh dan cekap, mengisi kekosongan yang wujud dalam STL untuk bekas bersaiz berubah-ubah dan heterogen.
Atas ialah kandungan terperinci Bagaimanakah C Boleh Mengendalikan Data Heterogen dalam Bekas Bersaiz Boleh Ubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!