使用extern 模板避免模板實例化
模板實例化是C 程式設計中至關重要的一步,在編譯時創建特定的模板實例。在某些場景下,有必要控制模板實例化以最佳化編譯時間並避免冗餘定義。這就是 extern template 關鍵字發揮作用的地方。
函數模板的 Extern 模板
與函數模板一起使用時,extern 模板指示編譯器不要實例化指定的當前翻譯單元內的模板。它表明該模板的實例將在程式的其他地方找到。這在多個原始檔案使用相同參數實例化相同模板的情況下特別有用,從而導致編譯器必須丟棄多個定義。
範例:
考慮以下程式碼片段:
// header.h template <typename T> void f() { /* Body */} // source1.cpp #include "header.h" void something1() { f<int>(); } // source2.cpp #include "header.h" extern template void f<int>(); void something2() { f<int>(); }
在這種情況下,source2.cpp 中的extern 範本通知編譯器f
類別範本的外部範本
與函數範本類似,也可以使用 extern 範本與類別範本。這樣做是為了避免使用相同參數多次實例化模板類別。
範例:
// header.h template <typename T> class MyClass { /* Body */} // source1.cpp #include "header.h" MyClass<int> obj1; // source2.cpp #include "header.h" extern template class MyClass<int>; MyClass<int> obj2;
這裡,source2.cpp 中的 extern 範本確保MyClass
使用 extern 範本的指南
以上是`extern template` 如何防止 C 中的冗餘模板實例化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!