标签: d-pointer

将新成员函数添加到d指针类中断二进制兼容性?

将新的成员函数添加到d指针类定义中会破坏二进制兼容性吗?

例如,下面的新定义是否会破坏与原始定义相比的二进制兼容性?(附带问题,是否有一个工具可以告诉我,如果新的.so打破二进制兼容性与旧的.so相比?如果没有,我该如何手动检查?)

原版的:

#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;

class A
{
  public:
   int get() { d->update(); return _d->get(); }

private:
   APrivate *_d;

};

class APrivate
{
  public:
   int get() { return _val; }
   void update() { _val = 1; }

  private:
   int _val;
};
#endif
Run Code Online (Sandbox Code Playgroud)

新:

#ifndef __TESTBC_H__
#define __TESTBC_H__
class APrivate;

class A
{
  public:
   int get() { _d->update(); return _d->get(); }

private:
   APrivate *_d;

};

class APrivate
{
  public:
   int get() { return _val; }
   void update() …
Run Code Online (Sandbox Code Playgroud)

c++ api-design binary-compatibility d-pointer

4
推荐指数
1
解决办法
2141
查看次数

“ d”在d指针中代表什么?

Qt在开发过程中大量使用了PIMPL习惯用法:https//wiki.qt.io/D-Pointer

正如我在这里所读到的:“ d指针”源于Trolltech的Arnt Gulbrandsen,他首先将该技术引入了Qt,使其成为最早的C ++ GUI库之一,即使在更大的发行版之间也保持二进制兼容性。” 。但是没有人说“ D”代表什么。

那么“ D”在D-Pointer中代表什么?

c++ qt pimpl-idiom d-pointer qt5

3
推荐指数
2
解决办法
89
查看次数

Qt访问继承类的D指针

我试图了解整个 d 指针是如何工作的。我得到了大部分零件,但我目前面临一个问题:

就像这里的Dpointer 继承人一样,我想使用 d 指针继承一个类(实际上它是 QProcess)。

由于访问 d 指针的函数是私有的,我无法通过简单的继承来访问它。我的想法是再次使用 Q_DECLARE_PRIVATE 宏来获取函数并访问它。这能行吗?在我尝试之前,我想要一些提示,因为我不知道这是否可行。

(我需要这个以避免整个许可问题。)

进程文件

#ifndef MYPROCESS_H
#define MYPROCESS_H

class QProcessPrivate;

class MyProcess : public QProcess {
   public:
     MyProcess(QObject *parent = 0);

   protected:
     Q_DECLARE_PRIVATE(QProcessPrivate);

};

#endif /* WIDGET_H */
Run Code Online (Sandbox Code Playgroud)

我的进程.cpp

#include "myprocess.h"

MyProcess::MyProcess(QObject *parent = 0)
      : QProcess(parent) {
}

MyProcess::setPid(Q_PID pid) {
    Q_D(const QProcess);
    d->pid = pid;
}
Run Code Online (Sandbox Code Playgroud)

c++ qt d-pointer

2
推荐指数
1
解决办法
3025
查看次数