C 使用模板進行的一種重構

2021-04-02 00:28:59 字數 1410 閱讀 3508

如果有一些遺留**,裡面有很多結構,定義了一些相同的成員,但在一些時候,需要取出這些成員,進行同樣的處理。如下面這些**的紅色部分。

——原先的程式結構是使用型別碼來區分實際的型別,客觀地說,這些遺留**是比較混亂的。

不想說太多,用簡單的**來說明問題吧。

typedef struct   _evt_switch : public evt_head evt_switch,*pevt_switch;

typedef struct   _evt_router : public evt_head evt_router,*pevt_router;

typedef struct  _evt_network : public evt_head evt_fw,*pevt_fw,evt_network,*pevt_network;

typedef struct  _evt_vpn : public evt_head evt_vpn,*pevt_vpn;

typedef struct  _evt_secure : public evt_head evt_secure,*pevt_secure;

這些型別實際上是同一類型別,實際上可以從同乙個類派生,使用 pullup member 方法重構。但是這些結構已經發布,不可能施行這種重構。可以這樣:

模板引擎的一種實現

什麼是模板引擎?說白了就是能夠自動替換佔位符的替換引擎。原理上也就是兩個步驟,找到 替換。但是替換不是簡單的替換,包括 簡單變數替換 複雜變數替換 物件變數替換 鍵值型別替換 自定義集合替換 同時顯示多個變數 模板呼叫 給呼叫模板傳引數 值模板 簡單迴圈 交差迴圈顯示 通過模板交差迴圈 條件判斷 從...

一種通用CMakeLists模板

1.cmake verson,指定cmake版本 cmake minimum required version 3.16 2.project name,指定專案的名稱,一般和專案的資料夾名稱對應 project demo 3.head file path,頭檔案目錄 include director...

陣列類模板(上) 一種高效的使用

預備知識 模板引數可以是數值型引數 非型別引數 template void func func 數值型模板引數的限制 變數不能作為模板引數 變數是不能在編譯期就唯一確定的 浮點數不能作為模板引數 浮點數在計算機內部的表示是不精確的 類物件不能作為模板引數 本質 模板引數是在編譯階段被處理的單元,因此...