C 11 中的「extern template」如何避免冗餘範本實例化?
Dec 20, 2024 pm 02:59 PM避免使用extern 模板進行模板實例化(C 11)
C 11 中的extern 模板關鍵字提供了一種機制來防止不必要的模板實例化,從而減少編譯時間和目標檔案尺寸。在某些情況下,知道模板將在其他地方實例化並使用此關鍵字指示編譯器不要執行實例化是有益的。
函數範本的用法
與問題中提供的範例相反, extern template 關鍵字也可以用於函數範本。考慮以下範例:
// header.h template<typename T> void bigFunc(); // source1.cpp #include "header.h" void something1() { bigFunc<int>(); } // source2.cpp #include "header.h" extern template void bigFunc<int>(); // This prevents its compilation in source2.cpp void something2() { bigFunc<int>(); }
登入後複製
如果沒有 extern 範本語句,bigFunc 將在 source1.cpp 和 source2.cpp 中編譯,導致冗餘的目標碼。透過使用 extern 模板,指示編譯器不要在 source2.cpp 中實例化 bigFunc,從而減少編譯時間和目標檔案大小。
類別模板的用法
如問題圖2所示,extern模板也可以用於類別templates:
// header.h template<typename T> class myClass { T getValue(); }; // source1.cpp #include "header.h" extern template class myClass<int>; // Prevent instantiation here void something1() { myClass<int> obj; obj.getValue(); }
登入後複製
在這種情況下,編譯器被指示不要實例化myClass
重要注意事項
extern模板的使用應僅限於以下情況知道該模板將在其他地方實例化。如果沒有實例化,程式將導致無法解析的參考。作為最佳實踐,建議在單一頭文件中聲明所有模板實例化,避免因不同文件中的多個實例化而導致的潛在問題。
以上是C 11 中的「extern template」如何避免冗餘範本實例化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)