Go to the source code of this file.
#define DPTR_D |
( |
|
Class | ) |
Class##Private& d = dptr.pri<Class##Private>() |
#define DPTR_DECLARE |
( |
|
Class | ) |
DPtrInterface<Class, Class##Private> dptr; |
#define DPTR_DECLARE_PRIVATE |
( |
|
Class | ) |
|
Value:inline Class##Private& d_func() { return dptr.pri<Class##Private>(); } \
inline const Class##Private& d_func() const { return dptr.pri<Class##Private>(); } \
friend class Class##Private;
#define DPTR_DECLARE_PUBLIC |
( |
|
Class | ) |
|
Value:inline Class& q_func() { return *static_cast<Class*>(dptr_ptr()); } \
inline const Class& q_func() const { return *static_cast<const Class*>(dptr_ptr()); } \
friend class Class;
#define DPTR_INIT |
( |
|
p | ) |
dptr(p) |
requrement: Base class must have default ctor.
example: Base.h class BasePrivate class Base { DPTR_DECLARE_PRIVATE(Base) public: Base(); virtual ~Base(); protected: Base(BasePrivate& d); DPTR_DECLARE(Base) }; Base.cpp: Base::Base(){} Base::Base(BasePrivate& d):DPTR_INIT(&d){} ... Base_p.h: class Base; class BasePrivate : public DPtrPrivate<Base> { public: int data; }; Derived.h: class DerivedPrivate; class Derived : public Base { DPTR_DECLARE_PRIVATE(Derived) public: Derived(); virtual ~Derived(); protected: Derived(DerivedPrivate& d); }; Derived.cpp Derived::Derived():Base(*new DerivedPrivate()){} Derived::Derived(DerivedPrivate& d):Base(d){} Derived_p.h class DerivedPrivate : public BasePrivate { public: int more_data; };
#define DPTR_INIT_PRIVATE |
( |
|
Class | ) |
dptr.setPublic(this); |
#define DPTR_P |
( |
|
Class | ) |
Class& p = *static_cast<Class*>(dptr_ptr()) |