為什麼 C++ 模板只能在標頭檔案中實現?
例證說明當你在 C++ 中例項化一個模板時,編譯器將建立一個新類。該類具有你放置模板引數的所有地方,代之以你在使用它時傳入給它的實際引數。例如 -
template<typename T> class MyClass {
T foo;
T myMethod(T arg1, T arg2) {
// Impl
}
};然後在你的程式中某處使用該類,
MyClass<int> x;
編譯器每在你傳入此型別引數時會建立一個新類。例如,如果你使用不同的模板引數建立了 3 個物件,你會得到 3 個類,相當於以下內容 -
class MyClassInt {
int foo;
int myMethod(int arg1, int arg2) {
// Impl
}
};為了實現此目的,編譯器在遇到此語句之前需要訪問該類的實現和方法,才能使用模板引數(在此情況下為 int)對其進行例項化。如果這些模板類實現不在標頭檔案中,它們將不可訪問,因此不會編譯。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP