Code:QxtPimpl.h

From qtnode

Jump to: navigation, search
#ifndef QXTPIMPL_H
#define QXTPIMPL_H

#define QXT_DECLARE_PRIVATE(C) friend class C##Private; QxtPrivateInterface<C, C##Private> qxt_d;
#define QXT_DECLARE_PUBLIC(C) friend class C;
#define QXT_INIT_PRIVATE(C) qxt_d.setPublic(this);

template <typename PUB, typename PVT>
class QxtPrivateInterface {
public:
    inline QxtPrivateInterface() { pvt = new PVT; }
    inline ~QxtPrivateInterface() { delete pvt; }

    inline void setPublic(PUB* pub) { pvt->QXT_setPublic(pub); }
    inline PVT& operator()() { return *pvt; }
    inline const PVT& operator()() const { return *pvt; }

private:
    PVT* pvt;
};

template <typename PUB>
class QxtPrivate {
public:
    inline void QXT_setPublic(PUB* pub) { qxt_p_ptr = pub; }

protected:
    inline PUB& qxt_p() { return *qxt_p_ptr; }
    inline const PUB& qxt_p() const { return *qxt_p_ptr; }

private:
    PUB* qxt_p_ptr;
};

#endif
Personal tools