Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mencipta Bekas Heterogen dalam C?

Bagaimanakah Saya Boleh Mencipta Bekas Heterogen dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 10:54:02354semak imbas

How Can I Create Heterogeneous Containers in C  ?

Bekas Heterogen dalam C

Grafik yang anda rujuk menggambarkan pelbagai bekas STL berdasarkan ciri seperti saiz tetap/boleh ubah, jenis data, pengisihan , dan jenis akses. Walau bagaimanapun, ia tidak mempunyai bekas yang menyokong saiz pembolehubah dan heterogeniti secara serentak (menerima jenis data yang berbeza).

Dalam C , kebanyakan bekas direka bentuk untuk menyimpan objek daripada jenis tertentu menggunakan templat. Walaupun penunjuk boleh membenarkan penyimpanan heterogen, ia menimbulkan had. Selain itu, bekas lompang* kurang selamat jenis.

Untuk bekas heterogen sebenar yang boleh menyimpan jenis yang tidak berkaitan, pertimbangkan pilihan berikut:

  • Boost.Any :

    Boost.Any menyediakan cara umum untuk menyimpan sebarang jenis, membolehkan anda mencipta bekas yang mengandungi campuran integer, rentetan dan objek yang lebih kompleks.

    <code class="cpp">using boost::any;
    std::list<boost::any> values;
    values.push_back(42);
    values.push_back("Hello, world!");</code>
  • Boost.Variant:

    Boost.Variant adalah serupa dengan Boost.Any tetapi memerlukan menyatakan jenis yang dibenarkan pada masa penyusunan. Ini menguatkuasakan keselamatan jenis sambil masih mendayakan storan heterogen.

    <code class="cpp">using boost::variant;
    std::vector<boost::variant<int, std::string>> vec;
    vec.push_back(44);
    vec.push_back("C++");</code>

Perpustakaan ini membenarkan penciptaan bekas yang boleh menyimpan dan mengakses data pelbagai jenis secara fleksibel. Walaupun tidak disediakan secara langsung oleh STL, alternatif ini menawarkan penyelesaian untuk penyimpanan data heterogen dalam C .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Bekas Heterogen dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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