1樓:Jon Lee
這是CRTP (curiously recurring template pattern,https://
en.m.wikipedia.org/wiki
/Curiously_recurring_template_pattern
)。通過把建立虛函式表vtable的過程搬到編譯時間來提高效率。對於多次重複呼叫的函式,效能提高還是很客觀的。
很多優秀的模版庫都在用這個pattern,比如Eigen library.
父類access子類的protected或者private 函式問題,我用的是最普遍的解決方式:加上 friend。當然如果多層繼承,每乙個子類都要加呼叫他的父類為friend,這很麻煩,但鑑於子類最好將實現設為private,也只能這樣了。
還有另外的方法比如設乙個中間非模版accessor類,通過它來傳遞friendship。對我個人而言,不是很喜歡。
這篇文章裡:https://
accu.org/index.php/jour
nals/296
把我以上說的都講的很清楚,值得一看。
文章裡還有乙個偏方,是用函式指標,不用任何friend。娛樂一下就好了,我覺得實際上不適用。第一,子類必須是protected不能是private;第二,成員函式指標編譯器優化不好。
C 巢狀類類模板特化 error explicit specialization?
夏之幻想 特化需要在命名空間裡做,所以你不能在類內直接特化乙個類模板,你可以放到類外來做。PS.VS2015是允許這麼做的,這是微軟私貨,如果你注重可移植性就不要依賴這個特性。n4618 14.7.3 2 An explicit specialization shall be declared in...
C 抽象類作為模板引數,當其為指標時,如何析構?
小明 別總想著只要是物件就要new,多用RAII解決資源問題。首先你的linklist初始化就不要new.你要做的是過載 operator 接著linklist繼承的是linerlist是如何實現,為啥抽象基類要具體化,你只是使用他的指標。多用智慧型指標,如果嫌棄智慧型指標,就學一下智慧型指標的思路...
C 類型別能否作為引數儲存?
夏洋 當這些類都繼承自乙個基類時,可以 其實就是個factory struct Base typedef map string std function void Creators Creators GetCreators Base create const string key template ...