扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

c++濡備綍瀹炵幇鍙嶅皠鏈哄埗

扬州沐宇科技
2024-04-15 09:56:10
c++

鍦–++涓疄鐜板弽灏勬満鍒堕€氬父闇€瑕佷娇鐢ㄤ竴浜涢澶栫殑宸ュ叿鍜屾妧鏈€備互涓嬫槸涓€绉嶅彲鑳界殑瀹炵幇鏂瑰紡锛?/p>

  1. 浣跨敤瀹忓畾涔夛細鍊熷姪瀹忓畾涔夊彲浠ュ湪缂栬瘧鏃剁敓鎴愪竴浜涢澶栫殑浠g爜锛屾瘮濡傚畾涔変竴涓畯鏉ュ0鏄庝竴涓被鐨勫厓鏁版嵁淇℃伅锛屽寘鎷被鐨勫悕绉般€佹垚鍛樺彉閲忋€佹垚鍛樺嚱鏁扮瓑銆?/li>
#define REFLECT(className) \
    static const char* className##__className = #className; \
    static const int className##__numMembers = 2; \
    static const char* className##__memberNames[] = { "member1", "member2" };
  1. 浣跨敤妯℃澘鍏冪紪绋嬶細閫氳繃妯℃澘鍏冪紪绋嬪彲浠ュ湪缂栬瘧鏃跺绫诲瀷杩涜鎿嶄綔锛屾瘮濡傚畾涔変竴涓ā鏉跨被鏉ュ瓨鍌ㄧ被鐨勫厓鏁版嵁淇℃伅銆?/li>
template <typename T>
class Reflection {
public:
    static const char* className;
    static const int numMembers;
    static const char* memberNames[];
};

template <typename T>
const char* Reflection<T>::className = nullptr;

template <typename T>
const int Reflection<T>::numMembers = 0;

template <typename T>
const char* Reflection<T>::memberNames[] = {};
  1. 浣跨敤RTTI锛圧unTime Type Identification锛夛細RTTI鍙互鍦ㄨ繍琛屾椂鑾峰彇绫诲瀷鐨勪俊鎭紝姣斿浣跨敤typeid鍏抽敭瀛楁潵鑾峰彇绫诲瀷鐨勫悕绉般€?/li>
class Base {
public:
    virtual void foo() {}
};

class Derived : public Base {
};

int main() {
    Base* obj = new Derived();
    const std::type_info& type = typeid(*obj);
    std::cout << type.name() << std::endl;
    delete obj;
    return 0;
}

閫氳繃浠ヤ笂鏂规硶鍙互瀹炵幇涓€瀹氱▼搴︿笂鐨勫弽灏勬満鍒讹紝浣嗘槸鍦–++涓疄鐜板畬鏁寸殑鍙嶅皠鏈哄埗浠嶇劧姣旇緝鍥伴毦锛屽洜涓篊++鏄竴绉嶉潤鎬佺被鍨嬭瑷€锛屼笉鍍忓姩鎬佽瑷€閭f牱鍙互鍦ㄨ繍琛屾椂鍔ㄦ€佸垱寤哄拰澶勭悊绫诲瀷銆?/p>

扫码添加客服微信