c 模板類 模板函式的宣告與定義應該放在標頭檔案裡

2021-06-22 08:38:00 字數 498 閱讀 3955

c++模板類/模板函式的宣告與定義應該放在標頭檔案裡,不要分開來寫類中函式的宣告與定義(比如在.h檔案裡宣告某個成員函式,在.cpp檔案裡定義該成員函式),這樣會導致連線錯誤。所應該將模板類/模板函式的定義與宣告寫在乙個.h檔案裡。

比如在類的標頭檔案宣告了乙個函式 templatevoid fun(t a);

然後在另乙個cpp 檔案裡 實現該函式

templatevoid fun(t a)

如果把模板實現和定義分開,在模板類所在的編譯單元裡當然就不可能知道模板引數將是什麼——int?char?甚至是使用者自定義資料?——模板函式/類也就無從展開。很顯然,相應的.o檔案也就不可能包含所有這些例項**。

只有把模板定義放到每乙個引用它的地方,這樣才可能完成展開——從這個意義上說,所謂模板定義其實應該算是模板宣告,真正的定義是在你確認了模板型別引數之後(由編譯器自動生成**)。

不過,即便如此,為了避免和傳統的.h .c使用習慣混淆,模板類所在的檔案一般還是會用無副檔名或*.inc的格式命名。

C 模板類定義與宣告

pragma once ifndef grid h define grid h template class grid int getwidth const static const int kdefaultwidth 10 static const int kdefaultheight 10 pr...

C 模板類定義與宣告

宣告和使用類模板 如果在類模板外定義成員函式,應寫成類模板形式 template 測試的模板類,如下 ifndef compare h define compare h template class compare endif include compare.h template compare c...

模板類 宣告與定義

模板類的宣告與定義 最近在編寫模板類時發現乙個問題 當把模板類分開為 h宣告檔案 和 cpp實現檔案時,在模板類的main檔案使用模板功能時,編譯結果完全正確,卻無法鏈結成功。但是,如果把main放到.cpp檔案中就沒有任何問題,或者把 cpp 和 h 檔案放在一起也沒有問題。於是摸索著學習,解決問...