47 #ifndef _MIRA_RECURSIVEMEMBERREFLECTOR_H_ 48 #define _MIRA_RECURSIVEMEMBERREFLECTOR_H_ 50 #include <type_traits> 53 #include <boost/mpl/eval_if.hpp> 54 #include <boost/mpl/identity.hpp> 85 namespace serialization {
100 template <
typename T,
typename Reflector>
106 template <
typename T,
typename Reflector>
132 friend class ClassFactoryDefaultConstClassBuilder;
137 XMemberNotFound(ex) {}
139 virtual void raise(
bool recursive =
false) {
throw *
this; }
233 template <
typename Derived>
241 mCurrentMemberMeta(NULL) {}
284 if(Derived::isReadOnly::value) {
285 val =
static_cast<int32
>(
member);
286 this->
This()->atomic(val);
288 this->
This()->atomic(val);
289 member =
static_cast<T
>(val);
303 this->
This()->invoke(member);
313 this->
This()->object(member);
334 boost::mpl::eval_if<std::is_base_of<mira::Object, T>,
335 boost::mpl::identity< ReflectPointerPolymorphic >,
337 boost::mpl::eval_if<std::is_abstract<T>,
338 boost::mpl::identity< ReflectPointerAbstract >,
340 boost::mpl::identity< ReflectPointerNormal >
344 type::invoke(*this->
This(), pointer);
357 this->
This()->invokePointerObject(*pointer);
373 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
375 typename OurRegistrar::ReflectorPtr r =
376 OurRegistrar::instance().getPolymorphicPointerReflector(
typeId);
381 MIRA_THROW(XIO,
"Cannot reflect the polymorphic member pointer '" 383 <<
"' was not registered with this serializer '" 384 << typeName<Derived>());
401 this->
This()->invokePointerObject(*pointer);
423 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
425 if(!OurRegistrar::isDestroyed())
426 OurRegistrar::instance().template registerClass<T>();
442 typedef serialization::PolymorphicPointerReflectorRegistrar<Derived> OurRegistrar;
443 if(!OurRegistrar::isDestroyed())
444 OurRegistrar::instance().template unregisterClass<T>();
453 assert(mCurrentMemberMeta!=NULL);
454 return *mCurrentMemberMeta;
465 return mCurrentMemberFullID;
475 template <
typename T>
487 this->
This()->trackObject(member);
499 static_assert(
sizeof(T)==0,
"Trying to reflect unknown type.");
507 r.invokeTrackObject(
member);
516 r.invokeTrackObject(
member);
525 r.invokeTrackObject(
member);
526 std::size_t size =
sizeof(
member) /
527 (static_cast<const char *>(static_cast<const void *>(&
member[1]))
528 -
static_cast<const char *
>(
static_cast<const void *
>(&
member[0])) );
531 serialization::Array<ItemType> array(
member, size);
541 r.invokeTrackObject(
member);
544 "Trying to call ReflectComplex::invoke<T>() with IsCollection<T> == true - something is wrong.");
556 r.invokeTrackObject(
member);
559 static_assert(!isTransparent::value,
560 "Trying to call ReflectCollection::invoke<T>() with IsTransparentSerializable<T> == true - something is wrong.");
580 r.pointerNormal(
pointer, typeId<T>());
609 r.pointerAbstract(
pointer, typeId<T>());
623 boost::mpl::eval_if<std::is_pointer<Type>,
624 boost::mpl::identity<ReflectPointer>,
626 boost::mpl::eval_if<IsAtomicSerializable<Type>,
627 boost::mpl::identity<ReflectAtomic>,
629 boost::mpl::eval_if<std::is_class<Type>,
630 boost::mpl::eval_if<IsCollection<Type>,
631 boost::mpl::identity<ReflectCollection>,
633 boost::mpl::identity<ReflectComplex>>,
635 boost::mpl::eval_if<std::is_enum<Type>,
636 boost::mpl::identity<ReflectEnumeration>,
638 boost::mpl::eval_if<std::is_array<Type>,
639 boost::mpl::identity<ReflectArray>,
641 boost::mpl::identity<ReflectUnknown>
664 this->
This()->invokeMemberOverwrite(member, meta);
685 std::string prevFullID;
687 prevFullID = mCurrentMemberFullID;
690 if(mCurrentMemberFullID.empty()) {
692 MIRA_THROW(XLogical,
"Top-level member cannot be 'inline'. " 693 "It must have an ID != NULL!");
694 mCurrentMemberFullID=meta.
id;
695 }
else if(meta.
id!=NULL)
696 mCurrentMemberFullID = mCurrentMemberFullID +
"." + meta.
id;
702 mCurrentMemberMeta = &meta;
711 ChooseReflect<T>::type::invoke(*this->
This(), member);
717 mCurrentMemberFullID=prevFullID;
719 mCurrentMemberMeta = prevMeta;
726 mCurrentMemberFullID=prevFullID;
728 mCurrentMemberMeta = prevMeta;
738 ChooseReflect<T>::type::invoke(*this->
This(), member);
751 }
catch (XMemberNotFound& ex) {
761 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
762 " '" << meta.
getName() <<
"'");
771 template<
typename T,
typename U>
773 const U& defaultValue)
779 }
catch (XMemberNotFound&) {
780 if(!Derived::isReadOnly::value) {
782 "using the default value instead.";
801 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
802 " '" << meta.
getName() <<
"'");
820 }
catch (XMemberNotFound&) {
827 (Derived::isReadOnly::value ?
"serializing" :
"deserializing") <<
828 " '" << meta.
getName() <<
"'");
837 std::string mCurrentMemberFullID;
861 template <
typename Derived>
874 this->
This()->pushObjectTrackingStore();
876 this->
This()->popObjectTrackingStore();
885 this->
This()->pushObjectTrackingStore();
888 this->
This()->popObjectTrackingStore();
898 this->
This()->pushObjectTrackingStore();
900 this->
This()->popObjectTrackingStore();
907 this->
This()->pushObjectTrackingStore();
909 this->
This()->popObjectTrackingStore();
918 this->
template member<T, T>(name,
member, comment, defaultValue, flags);
921 template<
typename T,
typename U>
925 this->
This()->pushObjectTrackingStore();
928 this->
This()->popObjectTrackingStore();
937 const char* comment,
const T& defaultValue,
939 this->
template member<T, T>(name,
member,
setter, comment, defaultValue, flags);
942 template<
typename T,
typename U>
944 const char* comment,
const U& defaultValue,
947 this->
This()->pushObjectTrackingStore();
950 this->
This()->popObjectTrackingStore();
956 const char* comment,
const T& defaultValue,
958 this->
template member<T, T>(name,
getter,
setter, comment, defaultValue, flags);
961 template<
typename T,
typename U>
963 const char* comment,
const U& defaultValue,
966 this->
This()->pushObjectTrackingStore();
969 this->
This()->popObjectTrackingStore();
977 this->
This()->pushObjectTrackingStore();
979 this->
This()->popObjectTrackingStore();
989 this->
This()->pushObjectTrackingStore();
991 this->
This()->popObjectTrackingStore();
1001 this->
This()->pushObjectTrackingStore();
1003 this->
This()->popObjectTrackingStore();
1006 template<
typename T>
1011 this->
This()->pushObjectTrackingStore();
1013 this->
This()->popObjectTrackingStore();
1017 template<
typename T>
1021 this->
template property<T, T>(name,
member, comment, defaultValue, std::move(hint), flags);
1024 template<
typename T,
typename U>
1029 this->
This()->pushObjectTrackingStore();
1032 this->
This()->popObjectTrackingStore();
1039 template<
typename T>
1041 const char* comment,
const T& defaultValue,
1044 this->
template property<T, T>(name,
member,
setter, comment, defaultValue, std::move(hint), flags);
1047 template<
typename T,
typename U>
1049 const char* comment,
const U& defaultValue,
1053 this->
This()->pushObjectTrackingStore();
1056 this->
This()->popObjectTrackingStore();
1060 template<
typename T>
1062 const char* comment,
const T& defaultValue,
1065 this->
template property<T, T>(name,
getter,
setter, comment, defaultValue, std::move(hint), flags);
1068 template<
typename T,
typename U>
1070 const char* comment,
const U& defaultValue,
1074 this->
This()->pushObjectTrackingStore();
1077 this->
This()->popObjectTrackingStore();
1086 template<
typename T>
1089 this->
This()->pushObjectTrackingStore();
1091 this->
This()->popObjectTrackingStore();
1102 template<
typename T>
1106 this->
This()->pushObjectTrackingStore();
1108 this->
This()->popObjectTrackingStore();
1117 template<
typename T>
1121 this->
This()->pushObjectTrackingStore();
1123 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
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:302
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:506
Provides safe casts for casting from a pointer to void* and vice versa while taking care of polymorph...
std::remove_cv< T >::type Type
Definition: RecursiveMemberReflector.h:621
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:515
void property(const char *name, T &member, const char *comment, const U &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1025
Type C3: for members that are pointers to abstract classes not derived from mira::Object.
Definition: RecursiveMemberReflector.h:606
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:1007
boost::mpl::eval_if< std::is_pointer< Type >, boost::mpl::identity< ReflectPointer >, boost::mpl::eval_if< IsAtomicSerializable< Type >, boost::mpl::identity< ReflectAtomic >, boost::mpl::eval_if< std::is_class< Type >, boost::mpl::eval_if< IsCollection< Type >, boost::mpl::identity< ReflectCollection >, boost::mpl::identity< ReflectComplex > >, boost::mpl::eval_if< std::is_enum< Type >, boost::mpl::identity< ReflectEnumeration >, boost::mpl::eval_if< std::is_array< Type >, boost::mpl::identity< ReflectArray >, boost::mpl::identity< ReflectUnknown > > > > > >::type type
Definition: RecursiveMemberReflector.h:646
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:943
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
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:936
Abstract base class for most Reflectors.
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:540
const std::string & getCurrentMemberFullID() const
Returns the full human readable object id / name of the current member being reflected.
Definition: RecursiveMemberReflector.h:462
void member(const char *name, T &member, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:871
Type A3: for arrays.
Definition: RecursiveMemberReflector.h:522
void property(const char *name, T &member, const char *comment, const T &defaultValue, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:1018
Type C1: for members that are pointers to normal classes.
Definition: RecursiveMemberReflector.h:577
#define MIRA_LOG(level)
Use this macro to log data.
Definition: LoggingCore.h:528
void trackObject(T &member)
Definition: RecursiveMemberReflector.h:318
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 B?c: for collection types.
Definition: RecursiveMemberReflector.h:553
void property(const char *name, T &member, const char *comment, PropertyHint &&hint=PropertyHint(), ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:973
Type A1: for atomic members (float,int,etc.)
Definition: RecursiveMemberReflector.h:504
Provided for convenience.
Definition: Singleton.h:564
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:772
void pointerAbstract(T *&pointer, int typeId)
Is called if a reflected pointer is a pointer to an abstract class.
Definition: RecursiveMemberReflector.h:399
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:81
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:1048
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:251
Type B1/B2: for complex types.
Definition: RecursiveMemberReflector.h:538
Wrapper class for reflecting arrays.
XMemberNotFound_NoDefault() MIRA_NOEXCEPT_OR_NOTHROW
Definition: RecursiveMemberReflector.h:133
const ReflectMemberMeta & getCurrentMemberMeta() const
Returns the meta-information of the current member that is reflected.
Definition: RecursiveMemberReflector.h:451
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:985
Abstract base class for most Reflectors.
Definition: AbstractReflector.h:165
static bool usesHumanReadableIDs()
Returns true, if the concrete derived Reflector supports human readable IDs.
Definition: ReflectorInterface.h:845
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:128
$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:339
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:369
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:1118
Type A2: for enums.
Definition: RecursiveMemberReflector.h:513
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:476
SetReflectedAsPointer()
Definition: RecursiveMemberReflector.h:108
A singleton template class that can be freely configured using policies that control the instantiatio...
Definition: Singleton.h:531
void pointerNormal(T *&pointer, int typeId)
Is called if a reflected pointer is a "normal" pointer.
Definition: RecursiveMemberReflector.h:355
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.
static void invoke(Derived &r, T *&pointer)
Definition: RecursiveMemberReflector.h:608
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:484
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:1087
void invokePointerObject(T &member)
Is called to reflect objects of pointers.
Definition: RecursiveMemberReflector.h:736
bool value
Definition: RecursiveMemberReflector.h:103
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:1040
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:234
static void unregisterClass()
Unregisters the class.
Definition: RecursiveMemberReflector.h:440
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:1069
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:1061
void invokeMemberWithoutDefault(T &member, const ReflectMemberMeta &meta)
Delegates to invokeMember() and rethrows any occurring XMemberNotFound exception as XIO exception...
Definition: RecursiveMemberReflector.h:747
void member(const char *name, T &member, const char *comment, const U &defaultValue, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:922
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:524
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:882
RecursiveMemberReflectorBase()
The constructor.
Definition: RecursiveMemberReflector.h:240
#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:183
XMemberNotFound_NoDefault(XMemberNotFound &ex) MIRA_NOEXCEPT_OR_NOTHROW
Definition: RecursiveMemberReflector.h:136
Implementation of the CreationPolicy that is used by the Singleton template.
Definition: Singleton.h:190
Base class for exceptions.
Definition: Exception.h:194
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:568
void member(const char *name, const T &member, Setter< T > setter, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:895
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:496
Type C: for members that are pointers.
Definition: RecursiveMemberReflector.h:566
static void invoke(Derived &r, T *&pointer)
Definition: RecursiveMemberReflector.h:579
Holds a boost::function object to a special getter function that must meet the signature "T method()"...
Definition: GetterSetter.h:87
For internal use only: Holds value=true, if the type T is ever reflected as pointer with Reflector wi...
Definition: RecursiveMemberReflector.h:101
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:955
void invokeMember(T &member, const ReflectMemberMeta &meta)
Is called to invoke this Reflector on the member with the specified meta information.
Definition: RecursiveMemberReflector.h:662
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:997
void pointer(T *&pointer)
Is called if the member is a pointer.
Definition: RecursiveMemberReflector.h:326
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:1103
static constexpr auto MIRA_REFLECTOR_TOPLEVEL_NAME
Use this when a reflector needs to choose a name for serializing an object.
Definition: RecursiveMemberReflector.h:250
void invokeMemberOverwrite(T &member, const ReflectMemberMeta &meta)
The actual invokeMember implementation that is called from invokeMember().
Definition: RecursiveMemberReflector.h:674
void enumeration(T &member)
Is called by the if the member is an enumeration.
Definition: RecursiveMemberReflector.h:282
ReflectCtrlFlags
Control Flags that can modify the behavior of certain reflectors.
Definition: ReflectControlFlags.h:63
ReflectedAsPointer()
Definition: RecursiveMemberReflector.h:102
void collection(T &member)
Is called for each complex object or array, where the IsCollection<T> trait is true_type.
Definition: RecursiveMemberReflector.h:312
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:916
void member(const char *name, Getter< T > getter, Setter< T > setter, const char *comment, ReflectCtrlFlags flags=REFLECT_CTRLFLAG_NONE)
Definition: RecursiveMemberReflector.h:904
Detect the members type (A1,A2,A3,B1,B2,C) and choose the appropriate struct ReflectAtomic, etc.
Definition: RecursiveMemberReflector.h:619
static void registerClass()
Registers a new polymorphic class at the PolymorphPointerReflector.
Definition: RecursiveMemberReflector.h:421
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:962
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
The RecursiveMemberReflector extents the RecursiveMemberReflectorBase class and implements the member...
Definition: RecursiveMemberReflector.h:862
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:117
Definition: RecursiveMemberReflector.h:107
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:269
Type C2: for members that are pointers to polymorphic classes derived from mira::Object.
Definition: RecursiveMemberReflector.h:586
Definition: LoggingCore.h:76
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:555
static void invoke(Derived &r, T *&pointer)
Definition: RecursiveMemberReflector.h:588
static void invoke(Derived &r, T &member)
Definition: RecursiveMemberReflector.h:498
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:813
virtual int getTypeId() const =0
Return unique id for the class.