40 typedef std::function<
void *()> Constructor;
43 typedef std::function<std::shared_ptr<void>()> ConstructorShared;
46 typedef std::function<void(
void *)> Deconstructor;
56 this->m_fnClassConstructor = i_oObjectData.m_fnClassConstructor;
57 this->m_fnClassConstructorShared = i_oObjectData.m_fnClassConstructorShared;
58 this->m_fnClassDeconstructor = i_oObjectData.m_fnClassDeconstructor;
60 this->m_nClassSize = i_oObjectData.m_nClassSize;
61 this->m_fHasVirtual = i_oObjectData.m_fHasVirtual;
74 typedef typename std::remove_pointer<T>::type Type;
79 oData.m_fnClassConstructor = []() {
return new Type(); };
82 oData.m_fnClassConstructorShared = []() {
83 return std::static_pointer_cast<void>(std::make_shared<Type>());
87 oData.m_fnClassDeconstructor = [](
void *i_pData) {
delete reinterpret_cast<Type *
>(i_pData); };
90 oData.m_nClassSize =
sizeof(Type);
91 oData.m_fHasVirtual = std::has_virtual_destructor<Type>::value;
101 template<
typename T =
void>
103 return (this->m_fnClassConstructor ?
reinterpret_cast<T *
>(this->m_fnClassConstructor()) :
nullptr);
110 template<
typename T =
void>
112 return (this->m_fnClassConstructorShared ? std::static_pointer_cast<T>(this->m_fnClassConstructorShared())
120 template<
typename T =
void>
122 if (this->m_fnClassDeconstructor) {
123 return this->m_fnClassDeconstructor(i_tData);
132 return this->m_fnClassConstructor;
139 return this->m_fnClassConstructorShared;
146 return this->m_fnClassDeconstructor;
152 [[nodiscard]]
size_t size()
const {
153 return this->m_nClassSize;
160 return this->m_fHasVirtual;
166 Constructor m_fnClassConstructor;
169 ConstructorShared m_fnClassConstructorShared;
172 Deconstructor m_fnClassDeconstructor;
175 size_t m_nClassSize{};
178 bool m_fHasVirtual{};
A class for representing and handling data of an arbitrary type.
Definition: ObjectData.h:37
bool hasVirtual() const
Getter for m_fHasVirtual.
Definition: ObjectData.h:159
Constructor constructor() const
Getter for m_fnClassConstructor.
Definition: ObjectData.h:131
size_t size() const
Getter for m_nClassSize.
Definition: ObjectData.h:152
std::shared_ptr< T > constructShared()
Constructs an object of a specific type.
Definition: ObjectData.h:111
CObjectData()=default
Default constructor.
Deconstructor deconstructor() const
Getter for m_fnClassDeconstructor.
Definition: ObjectData.h:145
virtual ~CObjectData()=default
Default virtual destructor.
ConstructorShared constructorShared() const
Getter for m_fnClassConstructorShared.
Definition: ObjectData.h:138
void deconstruct(T *i_tData)
Deconstructs an object of a specific type.
Definition: ObjectData.h:121
static CObjectData get()
Static function for creating CObjectData for a specific type.
Definition: ObjectData.h:73
T * construct()
Constructs an object of a specific type.
Definition: ObjectData.h:102
CObjectData(const CObjectData &i_oObjectData)
Copy constructor.
Definition: ObjectData.h:55
A namespace for development related classes and functions.