Mengakses Bekas Dasar dalam Penyesuai Bekas STL
Mengakses bekas asas dalam penyesuai bekas STL, seperti tindanan, baris gilir dan priority_queue, telah lama menjadi subjek rasa ingin tahu. Walaupun mungkin tiada kaedah standard rasmi, teknik pintar yang dikenali sebagai "penggodaman kontena" boleh digunakan.
Penggodaman Bekas
Pendekatan ini melibatkan mewujudkan kelas pembantu diperoleh daripada penyesuai kontena yang diminati. Kelas terbitan ini mendedahkan kaedah Container() statik yang mengembalikan rujukan kepada bekas asas.
Pertimbangkan coretan kod berikut:
<code class="cpp">template <class T, class S, class C> S& Container(priority_queue<T, S, C>& q) { struct HackedQueue : private priority_queue<T, S, C> { static S& Container(priority_queue<T, S, C>& q) { return q.*&HackedQueue::c; } }; return HackedQueue::Container(q); } int main() { priority_queue<SomeClass> pq; vector<SomeClass>& tasks = Container(pq); return 0; }</code>
Di sini, struct HackedQueue, yang mewarisi daripada priority_queue , mendedahkan kaedah Container(). Kaedah ini memberikan akses kepada vektor asas yang menyimpan elemen dalam baris gilir keutamaan.
Pendekatan Bukan Standard
Dalam Visual Studio 2008, penyesuai bekas tertentu menyediakan bukan -kaedah _Get_container() standard untuk mengakses bekas asas. Walau bagaimanapun, kaedah ini bukan sebahagian daripada standard rasmi dan mungkin tidak tersedia dalam semua pelaksanaan.
Dokumentasi Rasmi
Untuk dokumentasi berwibawa pada perpustakaan standard C, rujuk ke Rujukan Perpustakaan Standard C di https://www.cppreference.com/. Laman web ini menyediakan maklumat yang komprehensif tentang sintaks, semantik dan penggunaan semua komponen perpustakaan standard.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses bekas asas dalam penyesuai bekas STL seperti tindanan, baris gilir dan priority_queue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!