C 中缺少與Python 的__CLASS__ 宏直接等效的內容,這使得開發人員尋求替代解決方案來在運行時檢索目前類別名稱。
為了滿足這一需求,開發人員設計了宏,利用各種技術從 __PRETTY_FUNCTION__ 宏提供的資訊中提取類別名稱。當巨集在類別方法中使用時,傳回一個表示完全限定方法簽章的字串,包括類別名稱、方法名稱和參數。
其中一個名為 __METHOD_NAME__ 的巨集使用 methodName 輔助函數解析 __PRETTY_FUNCTION__ 字串。它刪除了返回類型、修飾符和參數,只留下類別名稱和方法名稱。
例如:
inline std::string methodName(const std::string& prettyFunction) { size_t colons = prettyFunction.find("::"); size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1; size_t end = prettyFunction.rfind("(") - begin; return prettyFunction.substr(begin,end) + "()"; } #define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__)
此巨集允許開發人員輕鬆擷取非-靜態方法。但是,當在 this 指標不可用的靜態方法中使用時,開發人員必須考慮利用 __PRETTY_FUNCTION__ 巨集的替代巨集。
對於只需要類別名稱的場景,可以使用 __CLASS_NAME__ 巨集:
inline std::string className(const std::string& prettyFunction) { size_t colons = prettyFunction.find("::"); if (colons == std::string::npos) return "::"; size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1; size_t end = colons - begin; return prettyFunction.substr(begin,end); } #define __CLASS_NAME__ className(__PRETTY_FUNCTION__)
此巨集同時適用於類別和靜態方法,解析 __PRETTY_FUNCTION__ 字串以有效擷取類別名稱。
以上是如何在沒有 __CLASS__ 巨集的情況下確定 C 中的類別名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!