2017-04-26 73 views
1

模板功能,爲了避免代碼BLOAD由於過度內聯...
這是實現其作用 像內聯函數模板功能的有效方法是什麼?C++內聯函數和只在頭庫

原始內聯函數聲明:

inline double MyInlineFunction(){ 
     return 3.141592653589; 
} 

替代函數聲明中使用模板函數:

template<typename T = void> double MyInlineFunctionT(){ 
    return 3.141592653589; 
} 
+1

我希望你不要使用'inline'來「幫助」編譯器優化你的代碼,但是你正在爲了鏈接器的目的去做。 –

+1

這似乎是浪費時間與任何現代編譯器。現代編譯器將根據具體情況自行決定使用「內聯」(可能使用關鍵字作爲提示)。另外,現代編譯器通常可以消除未使用的代碼。 –

+0

只是爲了鏈接propouse,以避免分發和編譯另一個cpp源文件的功能實現。 –

回答

2

標記功能inline告訴它的好有更多的定義相同功能的編譯器不止一個翻譯單位。這也暗示該函數應該在線擴展,但大多數編譯器在這方面做出自己的判斷。同樣,一個模板函數可以在多個翻譯單元中實例化,編譯器將自行判斷是否將其擴展爲內聯。

簡版:代碼大小沒有區別。但模板版本更難理解,難以編譯,難以使用,並且更可能產生錯誤。