47 #ifndef _MIRA_RECURSIVEMEMBERREFLECTOR_H_ 48 #define _MIRA_RECURSIVEMEMBERREFLECTOR_H_ 50 #include <type_traits> 80 namespace serialization {
87 [[nodiscard]]
bool query()
const 112 template<
typename T,
typename Reflector>
119 template<
typename T,
typename Reflector>
124 reflectedAsPointer<T, Reflector>().
set();
131 template<
typename DelegatingType,
typename =
void>
135 template<
typename DelegatingType>
136 struct HasDelegateTo<DelegatingType,
std::void_t<typename DelegatingType::DelegateTo>> : std::true_type {};
157 template<
typename DelegatingType,
typename SerializerTag>
160 MIRA_DEPRECATED(
"Please define (public!) type DelegateTo in specialization of IsTransparentSerializable<DelegatingType, SerializerTag> " 161 "to enable properly detecting the possibility of child members/properties",
162 static constexpr
void warn(){}
172 template<
typename T,
typename SerializerTag =
void>
177 if constexpr (std::is_enum_v<T>)
182 if constexpr (TransparentTrait::value) {
184 return hasRecursiveReflect<typename TransparentTrait::DelegateTo, SerializerTag>();
211 friend class ClassFactoryDefaultConstClassBuilder;
216 XMemberNotFound(ex) {}
218 void raise(
bool recursive =
false)
override 316 template <
typename Derived>
324 mCurrentMemberMeta(nullptr) {}
366 if constexpr(Derived::isReadOnly::value) {
368 this->
This()->atomic(val);
371 this->
This()->atomic(val);
372 member =
static_cast<T
>(val);
386 this->
This()->invoke(member);
396 this->
This()->object(member);
417 if constexpr (std::is_base_of_v<mira::Object, T>) {
420 else if constexpr (std::is_abstract_v<T>) {
439 this->
This()->invokePointerObject(*pointer);
457 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
459 typename OurRegistrar::ReflectorRef r =
460 OurRegistrar::instance().getPolymorphicPointerReflector(
typeId);
465 catch (XPolymorphicPointerReflectorNotRegistered&) {
469 "Cannot reflect the polymorphic member pointer '" 471 <<
"' was not registered with this serializer '" << typeName<Derived>()
473 #ifndef MIRA_REGISTER_LEGACY_SERIALIZERS
474 <<
" (Registration with legacy serializers must be explicitly enabled" 475 " by activating the option REGISTER_LEGACY_SERIALIZERS" 476 " [GlobalConfig, requires recompilation])";
493 this->
This()->invokePointerObject(*pointer);
515 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
517 if(!OurRegistrar::isDestroyed())
518 OurRegistrar::instance().template registerClass<T>();
534 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
535 if(!OurRegistrar::isDestroyed())
536 OurRegistrar::instance().template unregisterClass<T>();
545 assert(mCurrentMemberMeta!=
nullptr);
546 return *mCurrentMemberMeta;
557 return mCurrentMemberFullID;
570 return serialization::reflectedAsPointer<T, Derived>().query();
579 this->
This()->trackObject(member);
590 static_assert(
sizeof(T) == 0,
"Trying to reflect unknown type.");
597 this->
This()->invokeTrackObject(member);
598 this->
This()->atomic(member);
605 this->
This()->invokeTrackObject(member);
606 this->
This()->enumeration(member);
613 this->
This()->invokeTrackObject(member);
614 std::size_t size =
sizeof(
member)
615 / (static_cast<const char*>(static_cast<const void*>(&
member[1]))
616 -
static_cast<const char*
>(
static_cast<const void*
>(&
member[0])));
619 serialization::Array<ItemType> array(
member, size);
627 this->
This()->invokeTrackObject(member);
630 "Trying to call reflectComplex<T>() with IsCollection<T> == true " 631 "- something is wrong.");
633 this->
This()->invoke(member);
635 this->
This()->object(member);
642 this->
This()->invokeTrackObject(member);
645 static_assert(!isTransparent::value,
646 "Trying to call reflectCollection<T>() with IsTransparentSerializable<T> == " 647 "true - something is wrong.");
648 this->
This()->collection(member);
655 this->
This()->pointer(member);
664 this->
This()->pointerNormal(member, typeId<T>());
680 this->
This()->pointerPolymorphic(member,
typeId);
690 this->
This()->pointerAbstract(member, typeId<T>());
700 if constexpr (std::is_pointer_v<Type>) {
706 else if constexpr (std::is_class_v<Type>) {
714 else if constexpr (std::is_enum_v<Type>) {
717 else if constexpr (std::is_array_v<Type>) {
740 this->
This()->invokeMemberOverwrite(member, meta);
761 std::string prevFullID;
763 prevFullID = mCurrentMemberFullID;
766 if(mCurrentMemberFullID.empty()) {
768 MIRA_THROW(XLogical,
"Top-level member cannot be 'inline'. " 769 "It must have an ID != NULL!");
770 mCurrentMemberFullID=meta.
id;
771 }
else if(meta.
id!=
nullptr)
772 mCurrentMemberFullID = mCurrentMemberFullID +
"." + meta.
id;
777 if(meta.
id !=
nullptr)
778 mCurrentMemberMeta = &meta;
793 mCurrentMemberFullID=prevFullID;
795 mCurrentMemberMeta = prevMeta;
802 mCurrentMemberFullID=prevFullID;
804 mCurrentMemberMeta = prevMeta;
827 }
catch (XMemberNotFound& ex) {
837 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
838 " '" << meta.
getName() <<
"'");
847 template<
typename T,
typename U>
849 const U& defaultValue)
855 }
catch (XMemberNotFound&) {
856 if constexpr(!Derived::isReadOnly::value) {
858 "using the default value instead.";
877 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
878 " '" << meta.
getName() <<
"'");
896 }
catch (XMemberNotFound&) {
903 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
904 " '" << meta.
getName() <<
"'");
913 std::string mCurrentMemberFullID;
937 template <
typename Derived>
950 this->
This()->pushObjectTrackingStore();
952 this->
This()->popObjectTrackingStore();
961 this->
This()->pushObjectTrackingStore();
964 this->
This()->popObjectTrackingStore();
974 this->
This()->pushObjectTrackingStore();
976 this->
This()->popObjectTrackingStore();
983 this->
This()->pushObjectTrackingStore();
985 this->
This()->popObjectTrackingStore();
994 this->
template member<T, T>(name,
member, comment, defaultValue, flags);
997 template<
typename T,
typename U>
1001 this->
This()->pushObjectTrackingStore();
1004 this->
This()->popObjectTrackingStore();
1011 template<
typename T>
1013 const char* comment,
const T& defaultValue,
1015 this->
template member<T, T>(name,
member,
setter, comment, defaultValue, flags);
1018 template<
typename T,
typename U>
1020 const char* comment,
const U& defaultValue,
1023 this->
This()->pushObjectTrackingStore();
1026 this->
This()->popObjectTrackingStore();
1030 template<
typename T>
1032 const char* comment,
const T& defaultValue,
1034 this->
template member<T, T>(name,
getter,
setter, comment, defaultValue, flags);
1037 template<
typename T,
typename U>
1039 const char* comment,
const U& defaultValue,
1042 this->
This()->pushObjectTrackingStore();
1045 this->
This()->popObjectTrackingStore();
1048 template<
typename T>
1053 this->
This()->pushObjectTrackingStore();
1055 this->
This()->popObjectTrackingStore();
1060 template<
typename T>
1065 this->
This()->pushObjectTrackingStore();
1067 this->
This()->popObjectTrackingStore();
1072 template<
typename T>
1077 this->
This()->pushObjectTrackingStore();
1079 this->
This()->popObjectTrackingStore();
1082 template<
typename T>
1087 this->
This()->pushObjectTrackingStore();
1089 this->
This()->popObjectTrackingStore();
1093 template<
typename T>
1097 this->
template property<T, T>(name,
member, comment, defaultValue, std::move(hint), flags);
1100 template<
typename T,
typename U>
1105 this->
This()->pushObjectTrackingStore();
1108 this->
This()->popObjectTrackingStore();
1115 template<
typename T>
1117 const char* comment,
const T& defaultValue,
1120 this->
template property<T, T>(name,
member,
setter, comment, defaultValue, std::move(hint), flags);
1123 template<
typename T,
typename U>
1125 const char* comment,
const U& defaultValue,
1129 this->
This()->pushObjectTrackingStore();
1132 this->
This()->popObjectTrackingStore();
1136 template<
typename T>
1138 const char* comment,
const T& defaultValue,
1141 this->
template property<T, T>(name,
getter,
setter, comment, defaultValue, std::move(hint), flags);
1144 template<
typename T,
typename U>
1146 const char* comment,
const U& defaultValue,
1150 this->
This()->pushObjectTrackingStore();
1153 this->
This()->popObjectTrackingStore();
1162 template<
typename T>
1165 this->
This()->pushObjectTrackingStore();
1167 this->
This()->popObjectTrackingStore();
1178 template<
typename T>
1182 this->
This()->pushObjectTrackingStore();
1184 this->
This()->popObjectTrackingStore();
1193 template<
typename T>
1197 this->
This()->pushObjectTrackingStore();
1199 this->
This()->popObjectTrackingStore();
TypeId typeId()
Generates unique IDs for different types.
Definition: TypeId.h:94
This object can use object tracking internally, but the object tracking system's state remains unchan...
Definition: ReflectControlFlags.h:82
void reflectPointerAbstract(T *&member)
Type C3: for members that are pointers to abstract classes not derived from mira::Object.
Definition: RecursiveMemberReflector.h:688
Helper to show a warning at compile time if DelegateTo is missing in IsTransparentSerializable<Delega...
Definition: RecursiveMemberReflector.h:158
Type trait that indicates whether pointer tracking can be enabled for this type.
Definition: IsObjectTrackable.h:68
void object(T &member)
Is called for each complex object.
Definition: RecursiveMemberReflector.h:385
Type trait that indicates whether a type should be serialized "transparently", i.e.
Definition: IsTransparentSerializable.h:81
Provides safe casts for casting from a pointer to void* and vice versa while taking care of polymorph...
void property(const char *name, T &member, const char *comment, const U &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1101
void property(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1083
void member(const char *name, const T &member, Setter< T > setter, const char *comment, const U &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1019
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
void reflectPointerPolymorphic(T *&member)
Type C2: for members that are pointers to polymorphic classes derived from mira::Object.
Definition: RecursiveMemberReflector.h:669
void member(const char *name, const T &member, Setter< T > setter, const char *comment, const T &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1012
Abstract base class for most Reflectors.
const std::string & getCurrentMemberFullID() const
Returns the full human readable object id / name of the current member being reflected.
Definition: RecursiveMemberReflector.h:554
void member(const char *name, T &member, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:947
void property(const char *name, T &member, const char *comment, const T &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1094
#define MIRA_LOG(level)
Use this macro to log data.
Definition: LoggingCore.h:529
void trackObject(T &member)
Definition: RecursiveMemberReflector.h:401
Class object which supports some kind of class reflection.
Definition: Class.h:97
#define MIRA_RETHROW(ex, msg)
Macro for rethrowing an exception with file and line information and for adding additional informatio...
Definition: Exception.h:144
Contains toString and fromString functions for converting data types to strings and the other way rou...
#define MIRA_DEFINE_SERIALIZABLE_EXCEPTION(Ex, Base)
Macro for easily defining a new serializable exception class.
Definition: Exceptions.h:66
Setter< T > setter(void(*f)(const T &))
Creates a Setter for global or static class methods taking the argument by const reference.
Definition: GetterSetter.h:443
Holds a boost::function object to a special setter function that must meet the signature "void method...
Definition: GetterSetter.h:395
Type trait that indicates whether a type can be serialized as an atomic value.
Definition: IsAtomicSerializable.h:85
void property(const char *name, T &member, const char *comment, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1049
void chooseReflect(T &member)
Detect the members type (A1,A2,A3,B1,B2,C) and choose the appropriate function.
Definition: RecursiveMemberReflector.h:697
Provides type trait that indicates whether a type should be serialized "transparently".
Provides type trait that indicates whether pointer/object tracking should be enabled for a certain ty...
Contains internal accessor class that abstracts from the underlying getter and setter classes or dire...
void invokeMemberWithDefault(T &member, const ReflectMemberMeta &meta, const U &defaultValue)
Delegates to invokeMember() and handles any occurring XMemberNotFound exception by setting the member...
Definition: RecursiveMemberReflector.h:848
void pointerAbstract(T *&pointer, int typeId)
Is called if a reflected pointer is a pointer to an abstract class.
Definition: RecursiveMemberReflector.h:490
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:78
Marker for indicating parameters that should be ignored if they are missing in the config file...
void property(const char *name, const T &member, Setter< T > setter, const char *comment, const U &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1124
A property hint gives optional instructions to the property editor, i.e.
Definition: PropertyHint.h:82
Derived * This()
"Curiously recurring template pattern" (CRTP).
Definition: AbstractReflector.h:246
Wrapper class for reflecting arrays.
XMemberNotFound_NoDefault() MIRA_NOEXCEPT_OR_NOTHROW
Definition: RecursiveMemberReflector.h:212
const ReflectMemberMeta & getCurrentMemberMeta() const
Returns the meta-information of the current member that is reflected.
Definition: RecursiveMemberReflector.h:543
void property(const char *name, const std::string &id, T &member, const char *comment, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1061
Abstract base class for most Reflectors.
Definition: AbstractReflector.h:160
static bool usesHumanReadableIDs()
Returns true, if the concrete derived Reflector supports human readable IDs.
Definition: ReflectorInterface.h:801
Marker for indicating parameters that should be ignored if they are missing in the config file...
Definition: IgnoreMissing.h:73
Can be thrown by subclasses of RecursiveMemberReflectorBase to indicate that they did not find a cert...
Definition: RecursiveMemberReflector.h:207
$Header file containing base classes to enable class creation using a class factory$ ...
Implementation of the InstantiationPolicy that is used by the Singleton template. ...
Definition: Singleton.h:310
void pointerPolymorphic(T *&pointer, int typeId)
Is called if a reflected pointer is a polymorphic pointer to an object that is derived from mira::Obj...
Definition: RecursiveMemberReflector.h:451
bool query() const
Definition: RecursiveMemberReflector.h:87
void delegate(Getter< T > getter, Setter< T > setter, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Delegates the serialization directly to the specified member, without creating a separate compound fo...
Definition: RecursiveMemberReflector.h:1194
static bool isReflectedAsPointer()
For internal use only: Returns true, if the type T is ever reflected as pointer within the current tr...
Definition: RecursiveMemberReflector.h:568
SetReflectedAsPointer()
Definition: RecursiveMemberReflector.h:122
A singleton template class that can be freely configured using policies that control the instantiatio...
Definition: Singleton.h:495
void pointerNormal(T *&pointer, int typeId)
Is called if a reflected pointer is a "normal" pointer.
Definition: RecursiveMemberReflector.h:436
No flags.
Definition: ReflectControlFlags.h:65
A singleton class that can be freely configured using policies that control the creation, instantiation, lifetime and thread-safety.
PropertyHint type(const std::string &t)
Sets the attribute "type" to the specified value.
Definition: PropertyHint.h:295
void invokeTrackObject(T &member)
tracks the given object (if pointer tracking is enabled for type T)
Definition: RecursiveMemberReflector.h:576
void reflectPointer(T &member)
Type C: for members that are pointers.
Definition: RecursiveMemberReflector.h:653
Core class of the logging library.
void delegate(T &member, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Delegates the serialization directly to the specified member, without creating a separate compound fo...
Definition: RecursiveMemberReflector.h:1163
void reflectUnknown(T &member)
Definition: RecursiveMemberReflector.h:588
void invokePointerObject(T &member)
Is called to reflect objects of pointers.
Definition: RecursiveMemberReflector.h:812
void property(const char *name, const T &member, Setter< T > setter, const char *comment, const T &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1116
Getter< T > getter(T(*f)())
Creates a Getter for global or static class methods returning the result by value.
Definition: GetterSetter.h:136
The RecursiveMemberReflectorBase is a base class for all Reflectors that are used to visit the reflec...
Definition: RecursiveMemberReflector.h:317
static void unregisterClass()
Unregisters the class.
Definition: RecursiveMemberReflector.h:532
Provides type trait that indicates whether a type is a collection.
void property(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, const U &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1145
void property(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, const T &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1137
void invokeMemberWithoutDefault(T &member, const ReflectMemberMeta &meta)
Delegates to invokeMember() and rethrows any occurring XMemberNotFound exception as XIO exception...
Definition: RecursiveMemberReflector.h:823
void member(const char *name, T &member, const char *comment, const U &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:998
virtual std::string const & getIdentifier() const
Return identifier for the class.
void member(const char *name, const std::string &id, T &member, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:958
RecursiveMemberReflectorBase()
The constructor.
Definition: RecursiveMemberReflector.h:323
#define MIRA_NOEXCEPT_OR_NOTHROW
Definition: NoExcept.h:99
#define MIRA_OBJECT(classIdentifier)
Use this MACRO if you like the factory to automatically extract the class name from the given identif...
Definition: FactoryMacros.h:179
XMemberNotFound_NoDefault(XMemberNotFound &ex) MIRA_NOEXCEPT_OR_NOTHROW
Definition: RecursiveMemberReflector.h:215
Implementation of the CreationPolicy that is used by the Singleton template.
Definition: Singleton.h:165
Base class for exceptions.
Definition: Exception.h:195
void member(const char *name, const T &member, Setter< T > setter, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:971
static OneWaySwitch & reflectedAsPointer()
For internal use only: Holds value.isOn=true, iff the type T is ever reflected as pointer with Reflec...
Definition: RecursiveMemberReflector.h:113
void member(const char *name, T &member, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Specifies a class member for reflection/serialization.
Definition: ReflectorInterface.h:375
Definition: RecursiveMemberReflector.h:132
Holds a boost::function object to a special getter function that must meet the signature "T method()"...
Definition: GetterSetter.h:87
void member(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, const T &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1031
void invokeMember(T &member, const ReflectMemberMeta &meta)
Is called to invoke this Reflector on the member with the specified meta information.
Definition: RecursiveMemberReflector.h:738
Provides type trait that indicates whether a type can be serialized as atomic value.
void property(const char *name, const T &member, Setter< T > setter, const char *comment, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1073
void pointer(T *&pointer)
Is called if the member is a pointer.
Definition: RecursiveMemberReflector.h:409
void delegate(const T &member, Setter< T > setter, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Delegates the serialization directly to the specified member, without creating a separate compound fo...
Definition: RecursiveMemberReflector.h:1179
void reflectCollection(T &member)
Type B?c: for collection types.
Definition: RecursiveMemberReflector.h:640
static constexpr auto MIRA_REFLECTOR_TOPLEVEL_NAME
Use this when a reflector needs to choose a name for serializing an object.
Definition: RecursiveMemberReflector.h:333
void invokeMemberOverwrite(T &member, const ReflectMemberMeta &meta)
The actual invokeMember implementation that is called from invokeMember().
Definition: RecursiveMemberReflector.h:750
void enumeration(T &member)
Is called by the if the member is an enumeration.
Definition: RecursiveMemberReflector.h:365
ReflectCtrlFlags
Control Flags that can modify the behavior of certain reflectors.
Definition: ReflectControlFlags.h:63
void reflectEnumeration(T &member)
Type A2: for enums.
Definition: RecursiveMemberReflector.h:603
void collection(T &member)
Is called for each complex object or array, where the IsCollection<T> trait is true_type.
Definition: RecursiveMemberReflector.h:395
void reflectComplex(T &member)
Type B1/B2: for complex types.
Definition: RecursiveMemberReflector.h:625
Type trait that indicates whether a type is a collection.
Definition: IsCollection.h:63
void member(const char *name, T &member, const char *comment, const T &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:992
void member(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:980
constexpr bool hasRecursiveReflect()
Determine at compile time whether T may have members/properties:
Definition: RecursiveMemberReflector.h:173
static void registerClass()
Registers a new polymorphic class at the PolymorphPointerReflector.
Definition: RecursiveMemberReflector.h:513
void member(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, const U &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1038
Definition: IsTransparentSerializable.h:84
Accessor< Getter, Setter > makeAccessor(const Getter &getter, const Setter &setter)
Helper method that creates an accessor from a different combination of either direct access to a vari...
Definition: Accessor.h:300
void reflectPointerNormal(T *&member)
Type C1: for members that are pointers to normal classes.
Definition: RecursiveMemberReflector.h:662
The RecursiveMemberReflector extents the RecursiveMemberReflectorBase class and implements the member...
Definition: RecursiveMemberReflector.h:938
void * void_upcast(T *pointer)
Safe cast for casting from a pointer upwards to void* while taking care of polymorphism and multiple ...
Definition: VoidCast.h:108
Definition: RecursiveMemberReflector.h:120
For internal use by RecursiveMemberReflector.h!
void atomic(T &member)
Is called if the member is an atomic type (int, float, etc).
Definition: RecursiveMemberReflector.h:352
void reflectArray(T &member)
Type A3: for arrays.
Definition: RecursiveMemberReflector.h:611
Definition: RecursiveMemberReflector.h:84
void reflectAtomic(T &member)
Type A1: for atomic members (float,int,etc.)
Definition: RecursiveMemberReflector.h:595
Definition: LoggingCore.h:77
void invokeMemberWithDefault(T &member, const ReflectMemberMeta &meta, const serialization::IgnoreMissing &defaultValue)
Delegates to invokeMember() and handles any occurring XMemberNotFound exception by ignoring the excep...
Definition: RecursiveMemberReflector.h:889
virtual int getTypeId() const =0
Return unique id for the class.