pImpl
pImpl Idiom in C++
Loading...
Searching...
No Matches
pImpl.h
1/*
2 Copyright (c) 2023, Pascal JEAN aka epsilonrt
3 All rights reserved.
4
5 SPDX-License-Identifier: BSD-3-Clause
6*/
7#pragma once
8#include <memory>
9#include "./singleton.h"
10
11#ifndef DOXYGEN
12#define PIMPL_D(Class) Class::Private * const d = d_func()
13#define PIMPL_Q(Class) Class * const q = q_func()
14#define PIMPL_DECLARE_PRIVATE(Class)\
15 inline Class::Private* d_func() {\
16 return reinterpret_cast<Class::Private*>(d_ptr.get());\
17 }\
18 inline const Class::Private* d_func() const {\
19 return reinterpret_cast<const Class::Private *>(d_ptr.get());\
20 }\
21 friend class Class::Private;
22#define PIMPL_DECLARE_PUBLIC(Class) \
23 inline Class* q_func() { return reinterpret_cast<Class *>(q_ptr); } \
24 inline const Class* q_func() const { return reinterpret_cast<const Class *>(q_ptr); } \
25 friend class Class;
26#endif
27
40 public:
48 virtual ~PimplClass ();
49
57 bool isNull() const;
58
66 virtual void clear();
67
68 protected:
76 class Private;
77
86
94 std::unique_ptr<Private> d_ptr;
95};
96
97#ifdef DOXYGEN
113#define PIMPL_D(Class)
114
130#define PIMPL_Q(Class)
131
146#define PIMPL_DECLARE_PRIVATE(Class)
147
162#define PIMPL_DECLARE_PUBLIC(Class)
163#endif
164
PimplClass.
Definition pImpl.h:39
bool isNull() const
Check if the private class is null.
virtual void clear()
Clear the private class.
virtual ~PimplClass()
Destroy the PimplClass object.
PimplClass(Private &dd)
Construct a new PimplClass object.
std::unique_ptr< Private > d_ptr
The private class pointer.
Definition pImpl.h:94
The PimplClass::Private class.
Definition pImpl_p.h:19