导出DLL 隐藏私有成员变量和成员函数 工厂方法

导出DLL一般用下面的代码
// A.h

#ifdef DLL_EXPORTS 
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

class DLL_API A
{
public:
    func1();
    int x;
private:
    func2();
    int y;
}

//A.cpp

#define DLL_EXPORTS
#include "A.h"

...类的实现

但通常可能我并不希望把 private 的 func2() 和 y变量暴露给dll的使用者。直接在提供给使用者的 .h 中删掉是不行的,因为当类的使用者定义一个A的对象时,其申请的空间会后它实际所需的空间不一致。
(好像还 可以只提供DLL而不提供.h和.lib文件,然后显示链接所需的函数)
初始想法是在提供给用户的 A_public.h中只有 class A_Base 的实现和A的声明或者 A的指针,然后用户可以 A_Base * ptr = new A();但这样还是要调用A()构造函数,所以还是要把A的实现给出来,不然不能编译。

解法是用 工厂方法(factory method)来解决,示例如下

// A_public.h

class DLL_API A_Base
{
public:
    virtual func1()=0;
    int x;
    vitual ~A_Base(); //需要有 虚析构函数
}
class DLL_API A_Factor
{
public:
    A_Base * get_A();
}

// A_private.h

#include "A_public.h"

class A:public A_Base
{
public:
    func1();
private:
    func2();
    int y;
}

// A.cpp

#include "A_private.h"
A_Base * A_Factor::get_A()
{
    return new A();
}
... 实现 A 的相关函数

用户使用:
// dll_user.cpp

#include "A_public.h"

A_Base * ptr = A_Factor.get_A();
ptr->func1();
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值