星期日, 5月 04, 2008

Inclusion Model

事實上是為了回覆問題這一篇,在經過Josh Ko幫忙之後,我在"C++ Templates全覽" "6-1 置入式模型(Inclusion Model)"找到答案,實際上,template code是不支援 separation compile,在p.63有提及

function template的定義並沒有具現化,為了具現化一個template,編譯器必需知道"以那一份定義式"以及"以那哪些template arguments"對它具現化。不幸的是這個例子中,這兩項資訊被分置於兩個分開編譯的檔案...

而接著又在下面提到

解決這個問題最常見方法是,把template定義式放到其宣告式所在的表頭檔,可以在xxx.hpp最後一行加入#include "xxx.cpp";,也可以用到該template的每一個.c檔案中#include "xxx.cpp", 第三種作法是完全丟開xxx.cpp,把宣告和定義全部放進xxx.hpp ... 這種template的組織法稱為"置入式模型(inclusion model)"

在文中有說明,如果使用了,事實上也會連結hpp中其他的碼,讓程式碼非常的大,也會讓編譯時間變慢,但是不得不否認,這是一個最不會帶來問題的方法,書有說明,我引用的非常多啦,在此就不描述了

---
在Josh Ko幫忙之下,讓自己渡過一個愉快的週末XD。


Macintosh-2:huffmanTree yen3$ g++ -o test.out test.cpp heap.hpp
ld: warning in heap.hpp, file is not of required architecture

雖然compile過了,但是還是對這行waring非常感冒,還是想想怎麼解決好了


在回覆中有提到,其實g++ -o test.out test.cpp就可以解決了。

2 則留言:

Josh Ko 提到...

heap.hpp 其實就算是一種 header file(hence the suffix 'h'pp),所以只要編譯 test.cpp 就行了 ;)。

yen3 提到...

對吼,只能說自己以前有所遺漏....Orz