c++濡備綍瀹炵幇鍙嶅皠鏈哄埗
鍦–++涓疄鐜板弽灏勬満鍒堕€氬父闇€瑕佷娇鐢ㄤ竴浜涢澶栫殑宸ュ叿鍜屾妧鏈€備互涓嬫槸涓€绉嶅彲鑳界殑瀹炵幇鏂瑰紡锛?/p>
- 浣跨敤瀹忓畾涔夛細鍊熷姪瀹忓畾涔夊彲浠ュ湪缂栬瘧鏃剁敓鎴愪竴浜涢澶栫殑浠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" };
- 浣跨敤妯℃澘鍏冪紪绋嬶細閫氳繃妯℃澘鍏冪紪绋嬪彲浠ュ湪缂栬瘧鏃跺绫诲瀷杩涜鎿嶄綔锛屾瘮濡傚畾涔変竴涓ā鏉跨被鏉ュ瓨鍌ㄧ被鐨勫厓鏁版嵁淇℃伅銆?/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[] = {};
- 浣跨敤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>
相关问答