Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghidupkan Objek C daripada Rentetan yang Mengandungi Nama Kelasnya?

Bagaimanakah Saya Boleh Menghidupkan Objek C daripada Rentetan yang Mengandungi Nama Kelasnya?

Susan Sarandon
Susan Sarandonasal
2024-12-17 19:50:14753semak imbas

How Can I Instantiate C   Objects from Strings Containing Their Class Names?

Penyataan Objek Rentetan ke Kelas: Penerokaan dalam C

Dalam C , persoalan timbul: bolehkah kita menjana objek daripada rentetan yang mengandungi rentetannya nama kelas, mengelakkan keperluan untuk pengetahuan menyeluruh tentang kelas terbitan dan blok if-else? C tidak mempunyai mekanisme terbina dalam untuk ini, tidak seperti C # dengan keupayaan Refleksinya. Walau bagaimanapun, terdapat penyelesaian yang membolehkan kami mencapai fungsi ini.

Satu pendekatan melibatkan penggunaan peta untuk pemetaan jenis. Kami mencipta fungsi templat createInstance untuk menjana objek, dan peta jenis_map yang memetakan nama kelas kepada penunjuk fungsi yang sepadan. Ini membolehkan kami mendapatkan kejadian baharu dengan hanya mengakses peta menggunakan rentetan nama kelas.

Penyelesaian lain adalah untuk membolehkan kelas mendaftarkan diri mereka pada masa jalan. Kami mempunyai kaedah statik getMap dalam BaseFactory yang mengembalikan penunjuk map_type, yang dibuat semasa panggilan pertama dan tidak pernah dipadamkan. Kelas boleh menggunakan struct DerivedRegister untuk mendaftarkan diri mereka, menghantar nama kelas mereka sebagai argumen. Pendekatan ini memastikan kelas baharu dimasukkan secara automatik dalam proses pemetaan.

Untuk jenis yang tidak berkaitan tanpa kelas asas dikongsi, kami boleh menggunakan boost::variant untuk menampung nilai pulangan mereka. Rangsangan::varian bertindak seperti kesatuan, membawa maklumat tentang jenis dalamannya. Dengan menggunakan konsep ini, kami boleh memetakan nama kelas kepada penunjuk fungsi yang mengembalikan objek rangsangan::varian, yang boleh menyimpan contoh jenis yang diingini.

Dalam C , kami mempunyai pilihan untuk menggunakan Boost.Function untuk menyahganding kami kod daripada fungsi atau jenis tertentu. Struktur pemetaan kemudiannya akan menggunakan peta yang memetakan nama kelas kepada contoh Boost.Function, yang boleh digunakan untuk mencipta objek.

Kaedah ini menawarkan cara untuk menjana objek secara dinamik daripada perwakilan rentetan nama kelas mereka dalam C . Walaupun mereka memerlukan beberapa konfigurasi manual, mereka memberikan fleksibiliti dan mengelakkan keperluan untuk logik cawangan yang menyeluruh dalam kelas kilang.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghidupkan Objek C daripada Rentetan yang Mengandungi Nama Kelasnya?. 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