解决二进制兼容的问题

一个动态链接到较早版本的库的程序,在不经过重新编译的情况下能够继续运行在新版本的库,这样的库即“二进制兼容

.h

复制代码
 1 /*二进制兼容库
 2 * 隐藏实现细节:我们只需要发布 WidgetLib 的头文件和二进制文件,.cpp 文件可以是闭源的
 3 *头文件很干净,没有实现细节的干扰,可以作为 API 实现
 4 *由于供实现的头文件都被移动到了实现的源代码文件中,编译会更快
 5 */
 6 class WidgetPrivte;
 7 class Widget;
 8 
 9 /*为了能够在私有的实现类中访问其所在公共类,我们引入一个 Q 指针*/
10 struct WidgetPrivate
11 {
12     WidgetPrivate() {}
13     WidgetPrivate(Widget* q) : q_ptr(q) { }
14     Widget* q_ptr;
15     int     a;
16     string str;    
17 };
18 
19 class Widget
20 {
21 public:
22     Widget();
23     int getA() const;
24 
25 private:
26     WidgetPrivate* d_ptr;
27 };
28 
29 struct LabelPrivate
30 {
31     string text;
32 };
33 
34 class Label : public Widget
35 {
36 public:
37     Label();
38     string text();
39 private:
40     LabelPrivate* d_ptr;       //每个类维护自己的类指针
41 };
View Code
复制代码

.cpp

复制代码
 1 /*Widget*/
 2 Widget::Widget() :d_ptr(new WidgetPrivate)
 3 {
 4 
 5 }
 6 
 7 int Widget::getA() const
 8 {
 9     return d_ptr->a;
10 }
11 
12 
13 Label::Label() : d_ptr(new LabelPrivate)
14 {
15 
16 }
17 
18 string Label::text()
19 {
20     return d_ptr->text;
21 }
View Code
复制代码

 

posted @   三岁玩童  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示