Qt 中的实现指针 (PIMPL)
Pointer to implementation (PIMPL) in Qt
我用 MSVS 制作了一个 Dll,并成功地使用了 pimpl 方法,如下所示:
Dll include file:
#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;
};
}
The private include file:
namespace M
{
class P::C
{
public:
# Other variables and functions which are not needed to be exported...
}
}
And the cpp file:
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 设置为编译器。
您的代码看起来已找到并且应该独立于 IDE。
您可以使用 this, but i think this 是您要搜索的内容。
使用 QScopedPointer
我设法让它按照我想要的方式工作:
Dll include:
#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;
};
}
Private include:
namespace M
{
class PPrivate
{
public:
# Other variables and functions which are not needed to be exported...
}
}
The CPP file:
DllExport M::P::P(/*some arguments*/)
:d_ptr(new PPrivate())
{
#...
}
DllExport M::P::~P(){ }
DllExport int M::P::aFunction (/* some arguments*/)
{
#...
}
但是,如果有人认为有更好的主意,请分享。
我用 MSVS 制作了一个 Dll,并成功地使用了 pimpl 方法,如下所示:
Dll include file:
#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;
};
}
The private include file:
namespace M
{
class P::C
{
public:
# Other variables and functions which are not needed to be exported...
}
}
And the cpp file:
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 设置为编译器。
您的代码看起来已找到并且应该独立于 IDE。 您可以使用 this, but i think this 是您要搜索的内容。
使用 QScopedPointer
我设法让它按照我想要的方式工作:
Dll include:
#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;
};
}
Private include:
namespace M
{
class PPrivate
{
public:
# Other variables and functions which are not needed to be exported...
}
}
The CPP file:
DllExport M::P::P(/*some arguments*/)
:d_ptr(new PPrivate())
{
#...
}
DllExport M::P::~P(){ }
DllExport int M::P::aFunction (/* some arguments*/)
{
#...
}
但是,如果有人认为有更好的主意,请分享。