Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Terdapat Makro __CLASS__ untuk Pengekstrakan Nama Kelas dalam C?

Adakah Terdapat Makro __CLASS__ untuk Pengekstrakan Nama Kelas dalam C?

Barbara Streisand
Barbara Streisandasal
2024-11-08 08:08:02525semak imbas

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__
          ...
      }
    • 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__
          ...
      }

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!

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