乙份標頭檔案hpp,乙份cpp實現檔案
hpp:
#ifndef myfirst_hppcpp:#define myfirst_hpp
// declaration of template
template
void print_typeof (t const&);
#endif
// myfirst_hpp
#include使用模板函式:#include
#include
"myfirst.hpp"
// implementation/definition of template
template
void print_typeof (t const& x)
#include將會導致鏈結錯誤,必須有乙個基於double例項化的函式定義"myfirst.hpp"
// use of the template
int main()
為了通過編譯,有2兩種辦法:
1.把cpp檔案包含在標頭檔案裡面
2.在使用模板的檔案中引用cpp檔案
3.不要cpp檔案,將宣告和實現都放在hpp檔案裡面
#define myfirst_hpp開銷:#include
#include
// declaration of template
template
void print_typeof (t const&);
// implementation/definition of template
template
void print_typeof (t const& x)
#endif
// myfirst_hpp
1.增加了標頭檔案的大小
2.增加了編譯複雜度
宣告乙個顯式例項化的標頭檔案
#include現在使用這個標頭檔案,編譯正常"myfirst.hpp"
// explicitly instantiate print_typeof() for type double
template void print_typeof(double const&);
#include優點:避免了龐大的標頭檔案開銷注意點:乙個程式中最多只有乙個顯式例項化體如上宣告3份檔案."myfirstinst.cpp"
// use of the template
int main()
1份標頭檔案
1份實現檔案
乙份顯式例項化檔案
如下2種用法:
第一種使用應該引用「stackdef.hpp」
C Templates 模板實戰
包含模型 把模板的定義包含在宣告模板的標頭檔案裡面,即讓定義和宣告都位於同乙個標頭檔案中。如果不需要考慮建立期的時間問題,建議盡量使用包含模型來組織模板 非內聯函式模板在呼叫的位置並不會被擴充套件,而是當它們基於某種型別進行例項化之後,才產生乙份新的 基於該型別的 函式拷貝。顯式例項化 顯式例項化指...
C 模板實戰1 函式模板
模板本身不是可編譯的 而是用來指導編譯器生成可編譯 的文字。1 函式模板引數 函式模板引數可以根據模板實參自動推導,也就是說可以從實參自動推導的模板引數可以省略書寫,但是要注意以下幾個規則 1 編譯器只根據函式呼叫時給出的實參列表推導模板引數值,與函式引數無關的模板引數無法推導 2 與函式返回值相關...
C Templates學習筆記五 模板實戰
使用分離模型 讓模板定義和宣告在不同的檔案裡可能會導致鏈結錯誤。為了解決這種問題,我們把模板的宣告和定義都放在同乙個標頭檔案裡。例如 ifdef myfirst hpp define myfirst hpp include include template void print typeof t c...