作者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/cn.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