看板 C_and_CPP 關於我們 聯絡資訊
想請問如下的問題有沒有解法: B 檔案是函式庫 A 檔案是另一函式庫,會引入 B 檔案 A <===include=== B | \____________ | v > v C D 有的 client 會引入 A, 也需要用 B (並引入 B), 有的只要用 A, 不要用 B 為了讓 dependency 明顯一點, 我希望一個要用到 A & B 的 client 必須 同時 include A 跟 B, 只 include A 會 compile error (這樣做是, 例如將來我把某些 B 的功能移到另外的 Z 去時, 能明白知道哪些檔案該改) 原先的想法是在 A 中我寫成 namespace private_A { #include "B" }; 不幸的是因為 include guards, 我無法再引入 B 請問有其他解決辦法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.46.41
akasan:爛方法是直接 #undef B 的 include guards 05/25 00:55
suhorng:我用 #pragma once 囧 05/25 01:01
littleshan:這沒好解法,就算能放進namespace也會造成link error 05/25 01:34
littleshan:header file直接引入的做法造成許多問題,這是其一 05/25 01:35
原來還會造成 link error! 那請問這是有不直接引入, 其他選擇的意思嗎~? ※ 編輯: suhorng 來自: 118.166.46.41 (05/25 01:41)
littleshan:沒有XD 只要你還是寫C/C++就要捏著鼻子忍受它 05/25 01:48
CCWck:架構就不合理..你既然有只要A 不要B的狀況 為何A要include B 05/25 02:43
CCWck:如果你的D只要A 不要B 那你該想想 是不是B的東西A根本非必要 05/25 02:46
是 A 的某些宣告要用到 B 的東西 (有的用到的是在 private 裡面, 基本上與引入 A 的檔案無關, 也不保證未來會繼續有)
linotwo:看起來你的 B 可能一開始就是一堆可分割的東西擠在一起 05/25 03:39
linotwo:那不如一開始就把 B 的內容分割整理好 05/25 03:40
只是舉個例 也有可能是把 A 切開 (而不是把 B 切開) 規劃的確是個問題... 我還在學 所以慢慢 refactor, 一開始就要規劃好有點難... ※ 編輯: suhorng 來自: 118.166.46.41 (05/25 11:07)
littleshan:這架構很正常,B可能是底層,A則是較高階的函式庫 05/25 15:18
littleshan:原po希望把「A depends on B」隱藏起來方便日後抽換 05/25 15:19
littleshan:也是比較有彈性的想法 (突然想到可以用pimpl解決) 05/25 15:20
damody:有本 c++ 大型軟體開發 的書 有寫 05/26 01:59
請問是這一本嗎? http://www.books.com.tw/exep/prod/booksfile.php?item=0010531033 這好像是翻譯書, 請問品質如何呢? ※ 編輯: suhorng 來自: 118.166.50.221 (05/27 23:32)