作者noodleT (麵T)
看板C_and_CPP
標題[問題] 請問怎麼將類別打包成 dll 給客戶
時間Wed Jan 11 11:27:13 2017
公司的一位前輩說要打包類別,
要考慮隱藏 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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1484105235.A.6BF.html
1F:推 legendmtg: 不就pimpl嗎01/11 11:57
2F:推 damody: 推1樓01/11 13:44
3F:→ bachelorwhc: 你老闆要給對方的是abstract class 介面是return ptr01/11 15:41
4F:→ bachelorwhc: 這不需要什麼特別打包或撰寫技巧吧01/11 15:41
5F:→ bachelorwhc: 編譯出來後是static或dynamic library 除非逆向工程01/11 15:43
6F:→ bachelorwhc: 否則無法知道實作細節01/11 15:44
7F:→ bachelorwhc: 指標管理部分 如果你被要求給裸指標就直接給01/11 15:44
8F:→ bachelorwhc: 需要管理的就用smart pointer01/11 15:45
9F:→ bachelorwhc: 在windows的話 之後只要給對方.h跟.lib 編譯就能過01/11 15:45
10F:→ bachelorwhc: 實際執行期間就像你講的 動態連結dll 執行環境沒有01/11 15:46
11F:→ bachelorwhc: dll windows會自己警告01/11 15:46
12F:→ noodleT: 目前是用 shared prt 做,覺得有些麻煩。01/11 18:48
13F:→ noodleT: 這只是一個討論情境,並沒有真的客戶需求。01/11 18:48
14F:→ noodleT: 我會再往一樓提的方向研究看看01/11 18:48
15F:→ uranusjr: 用 Pimpl 加幾個 macro 用起來很簡單, 也不會有你的問題01/11 20:33
16F:→ uranusjr: 最簡單每個物件用一個 unique_ptr 指向實作時就好, 除非01/11 20:35
17F:→ uranusjr: 想做 copy-on-write 才會比較麻煩, 但那就是另外的問題01/11 20:35
18F:→ firose: 不能用 smart pointer 吧,客戶怎麼知道 NewAbstract 是如01/11 21:16
19F:→ firose: 何以即使用哪個版本產生的?01/11 21:17
客戶只要知道
Abstract 類別名就好了,
至於 NewAbstract
回傳哪一個子類別指標沒都關係,
只要用 Abstract* 都能接收吧?
或者是我誤會你的意思?
20F:推 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
21F:→ firose: 是可以接收,但清除就有麻煩,delete 不一定能工作吧 01/11 22:53
22F:→ hylkevin: 絕對要有virtual dtor,否則delete base pointer是未定 01/11 23:41
23F:→ hylkevin: 義行為。 01/11 23:41
24F:推 kevingwn: 不用virtual dtor,而是需要成對的new/delete,因為dll的 01/12 18:50
27F:→ EdisonX: 不是方式,是方向XD 01/14 12:55