模板虛函式不能存在原因

2022-07-16 07:39:08 字數 301 閱讀 4197

模板是編譯器在編譯期間生成**。虛函式是程式執行期間計算出呼叫哪個函式。

一旦程式在執行期間計算出它需要呼叫乙個模板化的虛函式,彙編已經生成了,編譯器不能再生成合適的例項了。因此,你不能使用模板虛函式。

不過,有一些強大且有趣的技術起源於結合多型和模板,尤其是所謂的 type erasure

c++模板的解釋:

成員函式模板不能被宣告為virtual。這個約束是強制的,因為虛函式的通常實現是使用固定大小的虛函式表,每個虛函式有乙個入口。然而,模板函式的例項數不是固定的,直到整個程式被編譯一遍。

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

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

C 這些函式不能宣告為虛函式的原因

1.不能宣告為虛函式的函式 普通函式 非成員函式 我在前面多型這篇部落格裡講到,定義虛函式的主要目的是為了重寫達到多型,所以普通函式宣告為虛函式沒有意義,因此編譯器在編譯時就繫結了它。靜態成員函式 靜態成員函式對於每個類都只有乙份 所有物件都可以共享這份 他不歸某乙個物件所有,所以它也沒有動態繫結的...

C 虛函式能不能模板化

虛函式不能模板化 編譯器在編譯乙個類的時候,需要確定這個類的虛函式表的大小。一般來說,如果乙個類有n個虛函式,它的虛函式表的大小就是n,如果按位元組算的話那麼就是4 n。如果允許乙個成員模板函式為虛函式的話,因為我們可以為該成員模板函式例項化出很多不同的版本,也就是可以例項化出很多不同版本的虛函式,...