隐藏实现的用处

隐藏实现,有时候被人称为“语法糖”,其实它还是有用处的!!!

 

1. 隐藏实现的例子

 

// A.h

class A

{

};

 

// B.h

#include "A.h"

class B

{

private:

    int m_value;

    A m_a; // 这里,其实一般用指针,再在前面加个前置声明。但这里为了举例子,这么声明,有时候针对模板/第三方库的话,就得这么声明。

};

 

上面就是一般的声明,我们知道m_value, m_a是private,没必要暴露在头文件,这就有了隐藏实现的做法:

// B.h

class BPrivate

class B

{

private:

    BPrivate* d;

};

// B.cpp

#include "B.h"

#include "A.h"

class BPrivate

{

public:

    int value;

    A a;

};

 

隐藏实现,大概就是上面这么个样子。咋看上去,是多此一举,有点“语法糖”的味道。

其实不然,还是有用处的:

比如,我们需要把上述的程序进行打包成so(动态链接库),并且暴露B的接口。这样,后面的B.h就更轻便,因为它去除了对A.h的依赖。而前面的B.h,就比较重,它还需依赖于A.h,而且A.h也有可能依赖于别的库。

 

故隐藏实现,有时候还是得派上用场的。

当然,并不是每个class都需隐藏实现,这得看情况。

 

 

此外,隐藏实现,还有一个很重要的用途是进行二进制代码的兼容(及更新so,而无需重新编译依赖该so的应用程序;关于这点,微软的COM做的比较优秀),这点没有具体细究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值