為什麼 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)對其進行例項化。如果這些模板類實現不在標頭檔案中,它們將不可訪問,因此不會編譯。


更新於: 2020 年 2 月 11 日

781 瀏覽量

開啟你的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.