Q_DECLARE_PRIVATE宏

相信大家在看源码的时候一定碰到过这个宏,它的用法

class Q_GUI_EXPORT QPainter
{
    Q_DECLARE_PRIVATE(QPainter)

源码:


#define Q_DECLARE_PRIVATE(Class) \
    inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } \
    inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } \
    friend class Class##Private;

一般是在类的私有部分然后用宏去包含这个类,这样的话就有一个d_ptr指针就指向了这个QPianter类,这个d_ptr指针就可以操作QPainter的成员变量以及成员函数了。

这个宏设计的初衷就是为了保持C++的二进制兼容性

二进制兼容性就是即使在更新或替换组件(如库或模块)后,现有程序的二进制形式仍然能够正常运行,而无需重新编译。
这通常是通过遵循一系列规则来实现的,比如不改变公共接口、添加私有成员等等之类的规则,你只要遵循这些规则,无论你添加代码,二进制文件不会改变,程序不用重新编译就能运行,但这里的不改变并不是绝对的不改变,而是肯定有一些小的改变。
主要就是方便!

相关好的博客:
https://developer.baidu.com/article/details/3308864
https://catcheroftime.github.io/blog/2019-10/qt-d%E6%8C%87%E9%92%88q%E6%8C%87%E9%92%88/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值