C 模板分離編譯

2021-10-23 06:25:09 字數 806 閱讀 5412

乙個程式(專案)由若干個原始檔共同實現,而每個原始檔單獨編譯生成目標檔案,最後將所有目標檔案鏈結起來形成單一的可執行檔案的過程稱為分離編譯模式。

假如有以下場景,模板的宣告與定義分離開,在標頭檔案中進行宣告,原始檔中完成定義:

// a.h

template

<

class

t>

t add

(const t& left,

const t& right)

;// a.cpp

template

<

class

t>

t add

(const t& left,

const t& right)

// main.cpp

#include

"a.h"

intmain()

分析:

解決方法

將宣告和定義放到乙個檔案 「***.hpp」 裡面或者***.h其實也是可以的。推薦使用這種。

模板定義的位置顯式例項化。這種方法不實用,不推薦使用。

【優點】

模板復用了**,節省資源,更快的迭代開發,c++的標準模板庫(stl)因此而產生

增強了**的靈活性

【缺陷】

模板會導致**膨脹問題,也會導致編譯時間變長

出現模板編譯錯誤時,錯誤資訊非常凌亂,不易定位錯誤

C 模板的分離編譯

首先,在c 中,為了乙個專案的規範,我們通常把 歸為三類 宣告檔案 實現檔案 測試檔案。比如,我要用c 實現乙個鍊錶,那麼就會建立這3個檔案 linklist.h 鍊錶的相關宣告 linklist.cpp 鍊錶的實現 test.cpp 鍊錶測試 那麼問題來了,普通鍊錶這樣寫起來一點問題都沒有 如果一...

模板的分離編譯

模板為什麼不支援分離編譯 要了解這個問題,我們先來看一下程式在計算機中的執行過程,用一幅圖簡單說明。在乙個規範的c 檔案中,我們通常把乙個檔案分為 檔案宣告,檔案實現和檔案測試三個部分。在一般的編譯環境中,h檔案的 都會擴充套件到.cpp裡面,然後編譯器對.cpp檔案編譯形成.obj檔案,cpp以分...

模板的分離編譯

模板不支援分離編譯 我們來分析一下模板為什麼不支援分離編譯呢,所謂的分離編譯就是我們在編寫程式的時候可能會出現如下的一種情況就是,我下面就是舉具體的例子了 template.h includeusing namespace std templateclass a template.cpp inclu...