[問題] C++樣板實例化(已解決)

看板C_and_CPP作者 (耗呆肥羊)時間14年前 (2011/11/03 22:08), 編輯推噓3(3022)
留言25則, 7人參與, 最新討論串1/1
【開發平台】:VC++ 【問題內容】:各位大大早安~ (∩_∩) 想請教關於樣板(template)的問題。 假如把類別樣板(class template)寫成 H 檔與 CPP 檔, 就是把它的定義與實作分開,在 VC++ 編譯時會出現「無法解析的外部符號」。 剛才問了谷哥,它說 ANSI C++ 有 export 這個關鍵字,但是, 這個關鍵字好像…要看編譯器的支援 (._.?) 我的問題是… 1. 目前 VC++ 有沒有支援 export 關鍵字? 2. 有哪些編譯器支援 export 關鍵字? 3. 為了把類別樣板分成 H 檔與 CPP 檔,有沒有方法可以 解決「無法解析的外部符號」錯誤? 【原程式碼】:沒有,不提供。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.226.131.134 ※ 編輯: johnhmj 來自: 125.226.131.134 (11/03 22:09) ※ 編輯: johnhmj 來自: 125.226.131.134 (11/03 22:12)

11/03 22:15, , 1F
11/03 22:15, 1F

11/03 23:10, , 2F
在實作檔寫一個function去呼叫你會用到的method強制編譯出
11/03 23:10, 2F

11/03 23:11, , 3F
實體, 把那個function包在anonymous Namespace隱藏起來
11/03 23:11, 3F

11/03 23:46, , 4F
一般是建議template這東西完全放在.h檔裡,不要分開來用,
11/03 23:46, 4F

11/03 23:47, , 5F
目前並不是所有C++ compiler都完全支援.
11/03 23:47, 5F

11/03 23:48, , 6F
我個人也是喜歡實作與宣告分開, 不過對template這東西,
11/03 23:48, 6F

11/03 23:48, , 7F
就不堅持這麼做了, 有時反而自找麻煩!
11/03 23:48, 7F

11/03 23:51, , 8F
用hpp檔吧 XD
11/03 23:51, 8F

11/04 00:04, , 9F
有時候置入式模型會帶來恐怖的編譯時間
11/04 00:04, 9F

11/04 00:17, , 10F
樓上說的沒錯,但建議去看C++ Template - The Complete
11/04 00:17, 10F

11/04 00:18, , 11F
Guide(侯捷有翻譯中文版), 裡面有提到為什麼及折衷方法.
11/04 00:18, 11F

11/04 00:19, , 12F
我個人覺得C++比C強大就在於template,不過也因template
11/04 00:19, 12F

11/04 00:20, , 13F
使得C++ compiler不好寫,還有最佳化部份難做,使C++產生
11/04 00:20, 13F

11/04 00:22, , 14F
的執行檔大很多. 真是一把兩面刃的利器...
11/04 00:22, 14F

11/04 00:23, , 15F
不過話說回來,C++當初如果沒有template這種東西,可能現
11/04 00:23, 15F

11/04 00:24, , 16F
在已經被其他語言取代掉了!
11/04 00:24, 16F

11/04 01:27, , 17F
template真的很威,而且是C++博大精深的地方啊~
11/04 01:27, 17F

11/04 01:44, , 18F
template是C++這隻大怪物最鋒銳的爪子啊...XD
11/04 01:44, 18F

11/04 02:04, , 19F
用 C 模擬 template 真的很麻煩,確實是 C++ 一大利器。
11/04 02:04, 19F

11/04 02:07, , 20F
C可以模擬出來嗎?似乎會用到大量的macro?
11/04 02:07, 20F

11/04 02:08, , 21F
就像MFC以前做的那個樣子...?
11/04 02:08, 21F

11/04 02:10, , 22F
更噁心的做法 : http://codepad.org/8dqQQ35o
11/04 02:10, 22F

11/04 02:10, , 23F
概念是承自c++ template, compiler 會展開,只是這次在
11/04 02:10, 23F

11/04 02:11, , 24F
前置處理時就展開。
11/04 02:11, 24F

11/04 14:03, , 25F
export已經被removed了
11/04 14:03, 25F
喔~(∩_∩)原來如此 哇~嗚( ̄ー ̄;) tropical72大大 提供的寫法果然是蠻噁心的… 非常感謝大大們提供的資料與指教( ̄︶ ̄) ※ 編輯: johnhmj 來自: 125.228.156.83 (11/04 20:22)
文章代碼(AID): #1Eig1JN9 (C_and_CPP)