Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Saya Boleh Mendapatkan Nama Kelas Semasa dalam C?

Bagaimana Saya Boleh Mendapatkan Nama Kelas Semasa dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 21:32:03866semak imbas

 How Can I Get the Current Class Name in C  ?

Makro Setara FUNGSI untuk Nama Kelas

Pembangun sering menghadapi keperluan untuk mengakses nama fungsi semasa menggunakan FUNGSI makro dalam C . Walau bagaimanapun, makro yang serupa untuk mengakses nama kelas tidak kelihatan serta-merta.

Penyelesaian Alternatif

Walaupun tiada padanan tepat FUNGSI untuk nama kelas, pendekatan alternatif boleh memberikan maklumat ini. Menggunakan typeid(*this).name() boleh digunakan, tetapi ia memberikan had dalam panggilan kaedah statik.

PRETTY_FUNCTION dan Macro Pihak Ketiga

Makro PRETTY_FUNCTION mengembalikan kedua-dua fungsi dan nama kelas. Walau bagaimanapun, penggunaannya adalah khusus untuk penyusun GCC.

Seseorang juga boleh memanfaatkan makro pihak ketiga, seperti makro METHOD_NAME dan CLASS_NAME, untuk mengekstrak kelas dan nama kaedah, seperti yang ditunjukkan dalam contoh kod di bawah:

inline std::string methodName(const std::string& prettyFunction) {
    ...
}

#define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)

...

inline std::string className(const std::string& prettyFunction) {
    ...
}

#define __CLASS_NAME__ className(__PRETTY_FUNCTION__)

Makro ini mengendalikan kerumitan menghurai kelas dan nama kaedah daripada __PRETTY_FUNCTION__, termasuk kes di mana tiada kelas.

Kesimpulan

Walaupun C tidak mempunyai persamaan langsung dengan FUNCTION untuk nama kelas, PRETTY_FUNCTION dan makro pihak ketiga menawarkan alternatif yang berdaya maju untuk mengakses kedua-dua kaedah dan nama kelas, memastikan kebolehselenggaraan dan kebolehbacaan kod dalam pelbagai senario.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mendapatkan Nama Kelas Semasa 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