模板 虛函式

2021-06-18 07:53:11 字數 767 閱讀 6417

按我的閱讀和設計經驗,乙個體繫結構如果要用模板,那麼這個體系裡應該全都是模板,如果實在要公開某些虛基類,一般在模板繼承鏈中最底層(最後派生層)實現基類函式(除非有特殊需求),但前提是這個虛基類的成員引數不能是模板。

在模板世界裡,虛函式除了增加虛表大小和降低執行效能,沒有實際意義。stl/atl/wtl是典型的全模板架構,沒有任何虛函式,mfc採用的是全虛表架構,雖然有部分模板類,但只是作為工具類存在,有沒有都不影響整體。

全模板架構的好處就是:你能由粗到細來設計模板。一旦某種粒度的模板不能滿足要求,則可以把需要抽象的部分再次提煉成模板而不是提煉成基類,而且所有函式都是編譯期就定好了。這樣不斷提煉不斷細分的後果就是**越來越晦澀難懂,可讀性很差。全虛表架構剛好相反,你必須先設計基類,再實現派生類,它的**可讀性非常好,但虛表的值是在執行期才填入的。

廢話說了不少,現在嘗試解決你的問題。你不是想實現函式呼叫操作符嗎,先按照引數個數實現9個模板類:

template

class callt0

};template

class callt1

};......

第二步,根據實際的類選擇不同的模板基類:

template

class delegate_0 : public callt0

;template

class delegate_1 : public callt1

;......

你有沒有發現這種設計很好寫**?強行把編譯期的多型和執行期的多型混合在一起,就像新手練瑜伽,無論如何找不到著力點。

模板vs虛函式

考慮如下兩個容器的定義 template class math container const t operator size t i const bool operator const math container a const template class music container co...

模板類 虛函式

1 class faux27 8910 template 11 class vrai 1216 為什麼 faux 中不行呢?因為如果 virtual function 是 template 的,根據使用的不同型別,class faux 會有很多 do do,do.而 c 要求在 faux 記憶體布局...

模板類可以使用虛函式,模板函式不能是虛函式

1 普通的類中怎麼使用虛函式,模板類中也可以這麼使用虛函式 不過需要注意的是使用模板類定義不同的型別則是兩個完全不同的類。2 模板函式不能是虛函式 編譯器期望在處理類定義的時候就能確定虛函式表的大小,如果允許有類的虛成員模板函式,那麼就必須要求編譯器提前知道程式中國有對該類的該虛成員模板函式的呼叫,...