這幾天在寫魚類抽象的時候,發現原來使用父類指標建立,替換,轉化子類物件的方法原來叫工廠模式,以前常常用這種方法,終於發現原來是有學名的。(●』◡』●)
這裡介紹一種使用巨集定義函式來建立工廠函式的方法,借鑑了cocos的巨集。
1、首先,我們要避免建立乙個不能例項化的抽象父類,除去用rtti,使用類id,我們還可以用如下方案:
template
struct isabstract
;
這是筆者在知乎上找到的乙個例子,也就是用了c++陣列物件不能是抽象類這一點,自動匹配過載函式的時候會匹配到使用任何引數的test(…),然後自然就返回乙個char的長度。
然後我們來看巨集定義函式,有兩個,乙個是新增create函式,乙個是用於工廠模式建立類:
#define create_fish(__fishtype__) ([
]())
//檢查是否是完整類(避免抽象類被實現從而導致錯誤),然後使用工廠函式建立類
#define add_create(__type__) \
static __type__* create() \
\ __type__ *pret = new(std::nothrow) __type__(); \
if (pret) \
\ else \
\}
由於巨集定義是在編譯前的字串替換,所以最好每句都加上「\」符號,然後有必要的話最外面加括號。
ok,乙個小技巧,感覺比寫virtual函式爽多了!~w_w~
小技巧 6 巧用巨集定義
大段的巨集定義可能會降低 的可讀性,但是適當使用巨集定義可以節省 量,讓 更加簡潔。比如對於定義有多種屬性的能力模組而言,這樣使用巨集定義會讓 更加清晰和簡潔 宣告一種屬性以及獲取該屬性值 define attr decl attr protected unsigned int attr 0 pub...
C語言巨集定義技巧
1,防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 2,重新定義一些型別,防止由於各種平台和編譯器的不同,而產生的型別位元組數差異,方便移 植。typedef unsigned char boolean boolean value...
C語言巨集定義和巨集定義函式
c語言巨集定義和巨集定義函式 巨集定義可以幫助我們防止出錯,提高 的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者 段,這些功能既可以寫成函式,也可以封裝成為巨集定義。那麼究竟是用函式好,還是巨集定義好?這就要求我們對二者進行合理的取捨。我們來看乙個例子,比較兩個數或者表示式...