1、二进制兼容
如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要重新编译,那么我们就说这个库是二进制兼容的。
如果不能保证库的二进制兼容性,就意味着每次发布库的新版本时,依赖该库的所有程序都必须重新编译才能正常运行。
2、公有类、私有类
是解决信息隐藏的问题的,发布库文件时只提供公有类的头文件而不必提供私有类的头文件,从而隐藏掉一些不想公开的内容。
如果修改的内容是私有类里面的,那么重新编译库以后,对外的公有类并没有发生变化,从而达到二进制兼容的目的。
因此这样设计类的目的至少有两个:
(1)信息隐藏
(2)二进制兼容
你不应该把这样的 private class 放在你的类的同一个头文件中,因为这样做的话就没有意义了。常见做法是,定义一个 private 的头文件,例如使用 myclass_p.h 的命名方式(这也是 Qt 的命名方式)。并且记住,不要把 private 头文件放到你发布的 include 下面!因为这不是你发布的一部分,它们是私有的。
或者把私有类定义在公有类的cpp文件中。
一般是将公有类中的private成员放在私有类中。
3、Q_Q、Q_D
Q_Q是私有类访问公有类的方法。
Q_D是公有类访问私有类的方法。
template <typename T> inline T *qGetPtrHelper(T *ptr) { return ptr; }
template <typename Ptr> inline auto qGetPtrHelper(const Ptr &ptr) -> decltype(ptr.operator->()) { return ptr.operator->(); }
#define Q_DECLARE_PRIVATE(Class) \
inline Class##Private* d_func() {

本文探讨了Qt库的二进制兼容性,解释了如何通过公有类和私有类来实现信息隐藏,并确保版本更新时的兼容性。Q_Q和Q_D宏用于公有类与私有类之间的交互,是Qt实现d-pointer设计模式的关键,以维持二进制兼容性。
最低0.47元/天 解锁文章
8669

被折叠的 条评论
为什么被折叠?



