推 LPH66: 概念上應該還行, 然後這裡有個和 1. 相關用語「僅檔頭庫」 04/10 03:55
→ LPH66: (header-only library) 這是模版函式庫的常用實作方式 04/10 03:56
→ LPH66: 如你所說, 由於僅有檔頭所以跟 dll/lib 這種預編函式庫 04/10 03:58
→ LPH66: 基本上就沒什麼關係了 04/10 03:58
→ LPH66: 那這裡可能就有個 XY 問題了: 因為 C++ 這個機制的關係 04/10 03:59
→ LPH66: 這篇文章的大前提「dll 中的模版」其實是個很奇怪的需求 04/10 03:59
→ LPH66: 我會想問為什麼會有把模版編進 dll 的需求? 04/10 04:01
→ Keitaro: 感謝樓上回覆 我也是看到同事寫template class放在一個 04/10 08:10
→ Keitaro: dll project其中一個header裡面 要debug都沒辦法設中斷 04/10 08:10
→ Keitaro: 點去查資料才了解template的實作竟有這樣的差異 04/10 08:10
→ Keitaro: 如您所說 這個template class其實已經跟這個project的屬 04/10 08:12
→ Keitaro: 性是dll/lib/exe完全無關了 也不知道寫code的前同事是否 04/10 08:12
→ Keitaro: 考慮過這問題:) 04/10 08:12
→ Keitaro: 補充 chatgpt告訴我 c++20新增的module概念 可以支援把 04/10 08:21
→ Keitaro: template class/function放在dll cpp裡面了 04/10 08:21
推 wulouise: header only lib怎麼會有dll?dll裡面只有translation un 04/10 21:39
→ wulouise: it吧,難道我那邊理解錯誤 04/10 21:39
→ tinlans: 在過去,template 的資訊在編譯後就完全消失了,這帶來了 04/12 20:23
→ tinlans: 很多不便,後來做 LTO 時各家編譯器開始設法保存原始碼的 04/12 20:24
→ tinlans: 資訊到編譯後的產物裡,這也是為什麼你會問到 modules 04/12 20:25
→ tinlans: 可以這樣的原因,但它本質上其實並沒有多少改變。 04/12 20:26
→ tinlans: 另外你的用語是有問題的,template 應該放在後面,兩個 04/12 20:27
→ tinlans: 名詞放在一起時是名詞修飾名詞,後面的名詞才是主體。 04/12 20:27
→ tinlans: class template、function template 這樣寫才對。 04/12 20:28
→ tinlans: 至於為什麼要強調這個?因為 template 在 C++ 就是一種 04/12 20:28
→ tinlans: 還沒有實體的骨架這樣的東西,需要被實體化。 04/12 20:29
→ tinlans: 你顛倒過來寫,如果不是英語不好,那就是基礎概念理解上 04/12 20:31
→ tinlans: 存在嚴重的誤區。 04/12 20:31
感謝指正
→ tinlans: 「相當於直接變成MyApp的header」這描述也很奇怪,header 04/12 20:45
→ tinlans: 的從屬性是跟著 project 走,所以你其它地方描述倒是沒啥 04/12 20:45
→ tinlans: 問題,只是 header 寫出來就是給人家 include 的,只要 04/12 20:46
→ tinlans: include 了就是用到了它,但從屬關係並不會因此改變。 04/12 20:46
哦這一點是我的盲點
的確header在c++裡面只要有include就算是"project有用到它"
不需要vcxproj去設定include這個header 相比之下cpp檔就一定要設定才會compile
但平常我的project都還是會設定vcxproj會include header
這樣在visual studio的檔案總管那邊可以直接點開比較方便
我這邊的描述意思是"相當於MyApp的vcxproj有這個header"這樣的意思
→ tinlans: 不過這裡講的 header 從屬性是更抽象的概念,和 C++ 還有 04/12 20:47
→ tinlans: 它的編譯連結特性不存在任何關係。 04/12 20:48
※ 編輯: Keitaro (60.251.156.103 臺灣), 04/15/2025 17:44:01