Qt 中的实现指针 (PIMPL)
Posted
技术标签:
【中文标题】Qt 中的实现指针 (PIMPL)【英文标题】:Pointer to implementation (PIMPL) in Qt 【发布时间】:2020-02-17 14:21:00 【问题描述】:我用 MSVS 制作了一个 Dll,并成功使用了 pimpl 方法,如下所示:
Dll 包含文件:
#include <memory>
#define DllExport __declspec( dllexport )
namespace M
class P
public:
DllExport P(/*some arguments*/);
DllExport ~P();
DllExport int aFunction (/* some arguments*/);
private:
class C;
std::unique_ptr<C> mc;
;
私有包含文件:
namespace M
class P::C
public:
# Other variables and functions which are not needed to be exported...
还有cpp文件:
DllExport M::P::P(/*some arguments*/):mc(std::make_unique<C>())
# ...
DllExport M::P::~P()
DllExport int M::P::aFunction (/* some arguments*/)
#...
现在我想在 Qt creator 中实现这样的方法。我应该做出哪些改变?
(我想我必须使用 QScopedPointer 而不是 unique_ptr 但最好的实现形式是什么?)
PS:我将 clang 设置为编译器。
【问题讨论】:
【参考方案1】:您的代码看起来很合适,它应该独立于 IDE。 您可以使用this,但我认为this 是您要搜索的内容。
【讨论】:
当然我自己的代码是我尝试的第一件事。没用。【参考方案2】:使用QScopedPointer
我设法让它按照我想要的方式工作:
DLL 包括:
#define DllExport __declspec( dllexport )
#include <QScopedPointer>
namespace M
class PPrivate;
class P
public:
DllExport P(/*some arguments*/);
DllExport ~P();
DllExport int aFunction (/* some arguments*/);
private:
Q_DECLARE_PRIVATE(P)
QScopedPointer<PPrivate> d_ptr;
;
私人包括:
namespace M
class PPrivate
public:
# Other variables and functions which are not needed to be exported...
CPP 文件:
DllExport M::P::P(/*some arguments*/)
:d_ptr(new PPrivate())
#...
DllExport M::P::~P()
DllExport int M::P::aFunction (/* some arguments*/)
#...
如果有人认为有更好的想法,请分享。
【讨论】:
以上是关于Qt 中的实现指针 (PIMPL)的主要内容,如果未能解决你的问题,请参考以下文章
何时在 C++ 中的嵌套类上使用 Pimpl 模式,反之亦然?