– 為什麼C++的member function template不能是virtual的
問題的意思是,為什麼在C++裡面,一個類的成員函數不能既是 template 又是 virtual 的。比如,下面的代碼是不合法的:
class Animal{
public:
template<typename T>
virtual void make_sound(){
//...
}
};
- 從Unix/C開始,一個C/C++程式就可以被分開編譯,然後用一個linker連結起來。這種模型有一個問題,就是各個編譯單元可能對另一個編譯單元一無所知。
-
一個 function template最後到底會被 instantiate
為多少個函數,要等整個程式(所有的編譯單元)全部被編譯完成才知道。
-
同時,virtual
function的實作大多利用了一個"虛函數表"的東西,這種實作中,一個類的記憶體布局(或者說虛函數表的記憶體布局)需要在這個類編譯完成的時候就被完全确定。