[討論] 關於template inclusion model
最近我有一位做數值計算的同事,他用blitz與C++寫了一分計算核心給我。
他的程式全部的東西包含各物件成員函式實作都是在*.h檔案裡面。
然後最後有一個表頭檔去總和include所有相關.h,假設是"aa.h"。
我在用他的程式的時候發現到,如果我在兩個不同的編譯單元裡面各自放進了"aa.h"
,編譯器在連結期的時候會回報錯誤,說有multiple definition。
這讓我聯想到,在撰寫class template的時候,一般我們在運用這一些class template時
也是會把實作當作表頭檔引進。舉個例子,我可能在兩個不同的編譯單元都引進了
<vector>然後都用了std::vector<double>。如此一來,編譯器就會在編譯之前各自具
現化出std::vector<double>及其使用到的相關函數實作。但是在這種情況之下為什麼
編譯器在連結期不會跟我抱怨說std::vector<double>被重複定義了呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.205.186.80
→
09/08 20:32, , 1F
09/08 20:32, 1F
→
09/08 20:32, , 2F
09/08 20:32, 2F
→
09/08 20:33, , 3F
09/08 20:33, 3F
→
09/08 20:42, , 4F
09/08 20:42, 4F
→
09/08 20:44, , 5F
09/08 20:44, 5F
→
09/08 23:08, , 6F
09/08 23:08, 6F
→
09/08 23:09, , 7F
09/08 23:09, 7F
→
09/08 23:09, , 8F
09/08 23:09, 8F
→
09/08 23:10, , 9F
09/08 23:10, 9F
→
09/08 23:10, , 10F
09/08 23:10, 10F
→
09/08 23:12, , 11F
09/08 23:12, 11F
→
09/08 23:13, , 12F
09/08 23:13, 12F
→
09/08 23:13, , 13F
09/08 23:13, 13F
→
09/08 23:54, , 14F
09/08 23:54, 14F
→
09/08 23:56, , 15F
09/08 23:56, 15F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章