Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?

Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?

DDD
Lepaskan: 2024-12-05 17:07:14
asal
796 orang telah melayarinya

How Can I Check Object Types in C   Without `instanceof`?

Menyemak Jenis Objek dalam C : Alternatif kepada contoh Java

Di Java, pengendali instanceof membolehkan pembangun mengesahkan sama ada objek milik kepada kelas tertentu atau subkelasnya. Kefungsian serupa boleh dicapai dalam C menggunakan teknik pengenalan jenis masa jalan (RTTI).

Untuk menyemak sama ada objek daripada jenis tertentu, C menyediakan pengendali dynamic_cast. Operator ini cuba menukar penuding kepada objek kepada jenis yang diingini, dan jika berjaya, ia mengembalikan penuding kepada objek yang dipancarkan; jika tidak, ia mengembalikan penuding nol.

Pertimbangkan coretan kod berikut:

if(NewType* v = dynamic_cast<NewType*>(old)) {
   // old was safely casted to NewType
   v->doSomething();
}
Salin selepas log masuk

Dalam contoh ini, pengendali dynamic_cast digunakan untuk mencuba penukaran objek jenis lama kepada penunjuk jenis NewType. Jika penukaran berjaya, penuding v menghala ke objek yang ditukar dan kod boleh meneruskan operasi selanjutnya pada objek yang terhasil.

Adalah penting untuk ambil perhatian bahawa menggunakan RTTI memerlukan sokongan daripada pengkompil, dan ia sepatutnya didayakan semasa penyusunan. Selain itu, penggunaan dynamic_cast perlu dipertimbangkan dengan teliti kerana ia memperkenalkan overhed masa jalan tambahan.

Dalam kes di mana RTTI tidak tersedia atau apabila kebimbangan prestasi timbul, penyelesaian boleh digunakan. Satu pendekatan melibatkan mentakrifkan penghitungan yang mewakili semua jenis yang mungkin dan menyemak jenis yang diingini menggunakan static_cast:

if(old->getType() == BOX) {
   Box* box = static_cast<Box*>(old);
   // Do something box specific
}
Salin selepas log masuk

Kaedah ini, walaupun tidak sefleksibel seperti dynamic_cast, boleh menjadi alternatif yang sesuai dalam situasi tertentu. Walau bagaimanapun, perlu diingat bahawa pendekatan ini tidak mengendalikan berbilang peringkat warisan sepenuhnya dan mungkin memerlukan semakan tambahan untuk kelas terbitan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan