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

2021-07-31 03:55:28 字數 885 閱讀 5523

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

假設模板**如下:

1 // 模板定義 a.h

2 #include

3 4 template

5 class ttest

6 ... ;

12 13 // 模板實現 a.cpp

14 #include "a.h"

15 16 template

17 void ttest::output()

18 ...

22 23 // 呼叫模組 test.cpp

24 #include "a.cpp"

25 26 int main()

27 ...

複製**

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

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

// impl.cpp

#include "a.cpp"

template class ttest;

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

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

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

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...