看板 C_and_CPP 關於我們 聯絡資訊
公司的一位前輩說要打包類別, 要考慮隱藏 data member 。 只能在 . h 檔中透漏 member function. 所以給客戶(PM)的必須為抽象類別, 繼承的類別寫在cpp檔中再去實作。 此外,提供一個 new function 給客戶 如: class Abstract { public: Abstract *DoSomething() const; }; Abstract *NewAbstract(…); 這樣一來,客戶就不知道 data member 比較無法猜出實作細節。 但指標管理會是個問題, 例如上面的 DoSomething 返回指標。 請問大家打包程式碼時, 有什麼技巧呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.18.121 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1484105235.A.6BF.html
legendmtg: 不就pimpl嗎01/11 11:57
damody: 推1樓01/11 13:44
bachelorwhc: 你老闆要給對方的是abstract class 介面是return ptr01/11 15:41
bachelorwhc: 這不需要什麼特別打包或撰寫技巧吧01/11 15:41
bachelorwhc: 編譯出來後是static或dynamic library 除非逆向工程01/11 15:43
bachelorwhc: 否則無法知道實作細節01/11 15:44
bachelorwhc: 指標管理部分 如果你被要求給裸指標就直接給01/11 15:44
bachelorwhc: 需要管理的就用smart pointer01/11 15:45
bachelorwhc: 在windows的話 之後只要給對方.h跟.lib 編譯就能過01/11 15:45
bachelorwhc: 實際執行期間就像你講的 動態連結dll 執行環境沒有01/11 15:46
bachelorwhc: dll windows會自己警告01/11 15:46
noodleT: 目前是用 shared prt 做,覺得有些麻煩。01/11 18:48
noodleT: 這只是一個討論情境,並沒有真的客戶需求。01/11 18:48
noodleT: 我會再往一樓提的方向研究看看01/11 18:48
uranusjr: 用 Pimpl 加幾個 macro 用起來很簡單, 也不會有你的問題01/11 20:33
uranusjr: 最簡單每個物件用一個 unique_ptr 指向實作時就好, 除非01/11 20:35
uranusjr: 想做 copy-on-write 才會比較麻煩, 但那就是另外的問題01/11 20:35
firose: 不能用 smart pointer 吧,客戶怎麼知道 NewAbstract 是如01/11 21:16
firose: 何以即使用哪個版本產生的?01/11 21:17
客戶只要知道 Abstract 類別名就好了, 至於 NewAbstract 回傳哪一個子類別指標沒都關係, 只要用 Abstract* 都能接收吧? 或者是我誤會你的意思?
kwpn: pimpl或pure virtual interface01/11 21:21
※ 編輯: noodleT (36.237.86.47), 01/11/2017 22:19:38 ※ 編輯: noodleT (36.237.86.47), 01/11/2017 22:20:42
firose: 是可以接收,但清除就有麻煩,delete 不一定能工作吧 01/11 22:53
hylkevin: 絕對要有virtual dtor,否則delete base pointer是未定 01/11 23:41
hylkevin: 義行為。 01/11 23:41
kevingwn: 不用virtual dtor,而是需要成對的new/delete,因為dll的 01/12 18:50
kevingwn: CRT和exe不一定相同 參考http://ideone.com/hHyGzP 01/12 18:50
EdisonX: 提供另一個方式 : Linker , #1IcjMQK3 (C_and_CPP) 01/14 12:53
EdisonX: 不是方式,是方向XD 01/14 12:55