C 自己實現反射案例

2021-10-07 03:58:00 字數 1111 閱讀 1431

/*

* @descripttion: c++自己實現反射案例

* * 根據乙個字串(類的名稱),建立出乙個物件

* 實現思路

* 1. 可以用乙個map來儲存類名-建構函式這樣的鍵值對,每新增乙個類,就在這個map「註冊」乙個鍵值對

* 2. 因為這個map是乙個全域性都會用到的,所以可以使用單例模式

* 3. 在進入main函式之前,這個map就應該生成好,即每乙個類在例項化之前就執行了「註冊」的**

* * @version: 1.0

* @author: milo

* @date: 2020-06-05 15:14:40

* @lasteditors: milo

* @lastedittime: 2020-06-05 15:14:40

*/#include #include #include #define func functionusing namespace std;

class reflector

return nullptr;

}void register(const string &class_name, func && generator)

static shared_ptrinstance()

return ptr;

}};shared_ptrreflector::ptr = nullptr;

class registeraction

};#define register(class_name) \

registeraction g_register_action_##class_name(#class_name, ()\

);class base

};register(base);

class objecta : public base

};register(objecta);

class objectb : public base

};register(objectb);

int main()

g++ reflector.cpp -o reflector -std=c++11

C 利用反射實現動態引導程式集簡單案例

反射可以不但用來讀取元資料,還可以使用反射從編譯時還不清楚的型別中動態建立程式集,此案例摘自c 高階程式設計。首先先建立乙個控制台應用程式,然後新增乙個類庫,類庫名稱為calculatorlib,如下圖所示 calculatorlib程式集中有兩個方法,引數是x和y,乙個方法返回兩數之和,另乙個方法...

c so 反射 C 實現反射機制

net下的很多技術都是基於反射機制來實現的,反射讓.net平台下的語言變得得心應手。最簡單的,比如列舉型別,我們我可以很容易的獲得乙個列舉變數的數值以及其名稱字串。可是,在c 中,列舉變數本質上和乙個整形變數沒有區別,我們很難獲取乙個列舉變數的名稱字串。其實在c 中,我們可以通過巨集來實現類似反射的...

c so 反射 c 實現反射機制

下午接了個阿里 面試,當時剛剛睡醒,感覺有點懵。大腦莫名當機狀態,很多問題沒有表述清楚,有乙個關於 c 如何實現反射機制的問題,感覺蠻有意思,當時雖然回答了用函式指標和工廠模式,但是表述並不當,細節也沒有想清楚。晚上抽空簡單實現了一發 file name reflector.cpp author x...