Adakah Terdapat Makro __CLASS__ untuk Pengekstrakan Nama Kelas dalam C?

Barbara Streisand
Lepaskan: 2024-11-08 08:08:02
asal
528 orang telah melayarinya

Is There a __CLASS__ Macro for Class Name Extraction in C  ?

Carian untuk __CLASS__: Makro untuk Pengekstrakan Nama Kelas

C menyediakan makro FUNCTION untuk mendapatkan semula nama fungsi yang sedang dilaksanakan. Begitu juga, pembangun sering tertanya-tanya sama ada wujud makro yang setara untuk mendapatkan nama kelas, sama seperti __CLASS__.

Jawapannya terletak pada penerokaan alternatif kerana reka bentuk bahasa C. Berikut ialah beberapa pilihan yang berdaya maju:

  1. typeid(*this).name(): Ungkapan ini menghasilkan nama kelas yang layak sepenuhnya menggunakan operator typeid dan penunjuk ini.
  2. PRETTY_FUNCTION: Tersedia dengan gcc, makro ini menyediakan kaedah penuh atau nama fungsi statik, termasuk nama kelas.
  3. Tersuai Makro: Pembangun boleh menentukan makro tersuai untuk mengekstrak maklumat yang diingini. Contohnya:

    • Untuk pengekstrakan nama kaedah:

      #define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)
      
      inline std::string methodName(const std::string& prettyFunction) {
          // Extract the method name from __PRETTY_FUNCTION__
          ...
      }
      Salin selepas log masuk
    • Untuk pengekstrakan nama kelas:

      #define __CLASS_NAME__ className(__PRETTY_FUNCTION__)
      
      inline std::string className(const std::string& prettyFunction) {
          // Extract the class name from __PRETTY_FUNCTION__
          ...
      }
      Salin selepas log masuk

Makro tersuai ini meniru kefungsian CLASS tetapi memerlukan pertimbangan yang teliti untuk mengendalikan kes khas, seperti kaedah atau fungsi global tanpa konteks kelas.

Atas ialah kandungan terperinci Adakah Terdapat Makro __CLASS__ untuk Pengekstrakan Nama Kelas dalam C?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan