2008年3月24日 星期一

C++ Templates 的源碼檔案組織方式

在傳統的 C/C++ 程式設計中,我們通常把型別及函式的宣告式放在表頭檔 ( *.h header files),定義式放在實作檔 (*.c *.cpp)中,但是這種運作方式在 C++ templates 中會讓聯結器不能正常工作,因為函式的定義與宣告被放置於兩個不同的檔案,使得該 template function 無法被俱現化,解決的方式大概可分成三個:

1. Inclusion Model:將函式的定義直接寫在 header file,這也是最佳的處理方法。

2. Explicit Instantiation:新增一檔案,加入明確俱現化 template 的敘述,並引入實作檔。

3. Separation Model:使用 export 關鍵定,將 template 匯出。

沒有留言: