C 模板應用 模板定義和實現分離

2021-06-21 10:56:40 字數 874 閱讀 1265

關於c++中類的模板,慣常的用法都是把實現和定義放在標頭檔案裡了事。這樣的問題是,加大了標頭檔案的長度,減低了模板**的可讀性,還有就是破壞了物件導向的隱藏實現的規則。下面就是這種問題的兩個解決方案的總結。

假設模板**如下:

// 模板定義 a.h

#include template class ttest

... ;

// 模板實現 a.cpp

#include "a.h"

templatevoid ttest::output()

...// 呼叫模組 test.cpp

#include "a.cpp"

int main()

...

注意呼叫模組test.cpp中,不要包含標頭檔案a.h直接包含a.cpp,這樣就能夠編譯成功。這是由於編譯器要建立 ttest這個型別需要模板實現,但從頭檔案裡沒找到,所以它會認為實現在其它編譯單元中,但它不會報錯,而把找實現部分的工作留給了linker。linker同樣也是找不到實現,因此就不能生成ttest。上述第一種解決方法直接包含了實現檔案,讓compiler直接找到定義和實現,這樣的效果跟把定義和實現都放在a.h裡是一樣的。

第二中方法,類似第一種,只是test.cpp只包含a.h,然後新增乙個檔案link.cpp內容如下:

#include "a.cpp"

template class ttest;

//template class ttest;

//template class ttest;

如此一來,也能達到定義與實現分離的目的。只是也要包含a.cpp,另外隨著模板例項化不同的型別,impl,cpp中的型別也要跟著改變,有點笨拙的方法

C 模板應用 讓模板定義和實現分離的方法

關於c 中類的模板,慣常的用法都是把實現和定義放在標頭檔案裡了事。這樣的問題是,加大了標頭檔案的長度,減低了模板 的可讀性,還有就是破壞了物件導向的隱藏實現的規則。下面就是這種問題的兩個解決方案的總結。假設模板 如下 1 模板定義 a.h 2 include 3 4 template 5 class...

C 模板定義和實現分離導致的編譯錯誤

今天在實現乙個二叉樹的時候,用到了模板,沒在意,和平時一樣寫了兩個檔案 binarytree.h,binarytree.cpp。思路和平時一樣,h檔案中定義了模板類,然後在cpp檔案中實現了一些功能函式。然後在test.cpp中測試,遇到了一些問題 問題出現如下 test binarytree.cp...

c 模板的定義和實現

注意c c 模板的定義和實現 定義乙個類一般都是在標頭檔案中進行類宣告,在cpp檔案中實現,但使用模板時應注意目前的c 編譯器還無法分離編譯,最好將實現 和宣告 均放在標頭檔案中。如 test.h templateclass ctest test.cpp templatet ctest getval...