Cara Mencapai C Equivalent of Java's instanceof
Dalam Java, pengendali "instanceof" membenarkan anda untuk menentukan sama ada objek kepunyaan a kelas atau antara muka tertentu. Dalam C , terdapat beberapa kaedah untuk mencapai kefungsian ini.
Penghantaran Dinamik dengan RTTI
Satu pendekatan menggunakan penghantaran dinamik dengan Maklumat Jenis Masa Jalan (RTTI) didayakan. Ini memerlukan anda memasukkan pengepala yang diperlukan:
<code class="cpp">#include <typeinfo> #include <cxxabi.h></code>
Dan kemudian anda boleh melakukan lakonan dinamik menggunakan:
<code class="cpp">if(NewType* v = dynamic_cast<NewType*>(old)) { // old was safely casted to NewType v->doSomething(); }</code>
Perhatikan bahawa pendekatan ini memerlukan sokongan RTTI untuk didayakan dalam pengkompil anda .
Fungsi Maya
Kaedah lain ialah menggunakan fungsi maya. Anda boleh menentukan fungsi maya dalam kelas asas dan mengatasinya dalam kelas terbitan. Kemudian, anda boleh menyemak jenis dinamik objek dengan memanggil fungsi mayanya:
<code class="cpp">class Base { public: virtual void doSomething() {} }; class Derived : public Base { public: void doSomething() override {} }; ... if(auto* derived = dynamic_cast<Derived*>(old)) { derived->doSomething(); }</code>
Suis Jenis
Akhir sekali, anda boleh menggunakan suis jenis untuk menentukan jenis dinamik sesuatu objek. Pendekatan ini bergantung pada kelas type_info:
<code class="cpp">if(old.IsSameAs(typeid(NewType))) { // old was safely casted to NewType NewType* v = static_cast<NewType*>(old); v->doSomething(); }</code>
Pertimbangan
Walaupun kaedah ini menawarkan fungsi yang serupa dengan pengendali "instanceof" Java, adalah penting untuk mengingati pemutus dinamik dan pemeriksaan jenis boleh dikenakan penalti prestasi. Adalah disyorkan untuk mempertimbangkan menggunakan pendekatan alternatif seperti fungsi maya atau suis jenis untuk prestasi yang lebih baik dalam aplikasi kritikal.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Setara C bagi Operator \'instanceof\' Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!