Go to the documentation of this file.
43 bool derivedFrom(
const char* pBaseClass_name)
const;
80 return &T::GetRuntimeClassIdStatic();
85 #define CLASS_ID(T) mrpt::rtti::CLASS_ID_impl<T>()
87 #define CLASS_ID_TEMPLATE(class_name, T) mrpt::rtti::CLASS_ID_impl<T>()
88 #define CLASS_ID_NAMESPACE(class_name, namespaceName) \
89 mrpt::rtti::CLASS_ID_impl<namespaceName::class_name>()
94 template <
typename PTR>
97 return p->GetRuntimeClass() == CLASS_ID_impl<T>();
103 #define IS_CLASS(ptrObj, class_name) \
104 mrpt::rtti::IS_CLASS_impl<class_name>::check(ptrObj)
109 #define IS_DERIVED(ptrObj, class_name) \
110 ((ptrObj)->GetRuntimeClass()->derivedFrom(CLASS_ID(class_name)))
149 using Ptr = std::shared_ptr<CObject>;
176 #define DEFINE_MRPT_OBJECT(class_name) \
180 static const mrpt::rtti::TRuntimeClassId* _GetBaseClass(); \
181 static mrpt::rtti::CLASSINIT _init_##class_name; \
182 static const mrpt::rtti::TRuntimeClassId runtimeClassId; \
186 using Ptr = std::shared_ptr<class_name>; \
187 using ConstPtr = std::shared_ptr<const class_name>; \
188 using UniquePtr = std::unique_ptr<class_name>; \
189 using ConstUniquePtr = std::unique_ptr<const class_name>; \
190 static constexpr const char* className = #class_name; \
191 static constexpr auto getClassName() \
193 return mrpt::typemeta::literal(#class_name); \
195 static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); \
196 virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() \
198 static mrpt::rtti::CObject* CreateObject(); \
199 virtual mrpt::rtti::CObject* clone() const override; \
200 template <typename... Args> \
201 static Ptr Create(Args&&... args) \
203 return mrpt::make_aligned_shared<class_name>( \
204 std::forward<Args>(args)...); \
206 template <typename... Args> \
207 static UniquePtr CreateUnique(Args&&... args) \
209 return std::make_unique<class_name>(std::forward<Args>(args)...); \
213 MRPT_MAKE_ALIGNED_OPERATOR_NEW
217 #define IMPLEMENTS_MRPT_OBJECT_ALT_NAME(class_name, base, NameSpace, alt_name) \
218 mrpt::rtti::CObject* NameSpace::class_name::CreateObject() \
220 return static_cast<mrpt::rtti::CObject*>(new NameSpace::class_name); \
222 const mrpt::rtti::TRuntimeClassId* NameSpace::class_name::_GetBaseClass() \
224 return CLASS_ID(base); \
226 const mrpt::rtti::TRuntimeClassId& \
227 NameSpace::class_name::GetRuntimeClassIdStatic() \
229 return NameSpace::class_name::runtimeClassId; \
231 const mrpt::rtti::TRuntimeClassId NameSpace::class_name::runtimeClassId = \
232 {#class_name, NameSpace::class_name::CreateObject, \
233 &class_name::_GetBaseClass, alt_name}; \
234 const mrpt::rtti::TRuntimeClassId* \
235 NameSpace::class_name::GetRuntimeClass() const \
237 return CLASS_ID_NAMESPACE(class_name, NameSpace); \
239 mrpt::rtti::CLASSINIT NameSpace::class_name::_init_##class_name( \
241 mrpt::rtti::CObject* NameSpace::class_name::clone() const \
243 return static_cast<mrpt::rtti::CObject*>( \
244 new NameSpace::class_name(*this)); \
247 #define IMPLEMENTS_MRPT_OBJECT(class_name, base, NameSpace) IMPLEMENTS_MRPT_OBJECT_ALT_NAME(class_name, base, NameSpace, nullptr)
252 #define DEFINE_VIRTUAL_MRPT_OBJECT(class_name) \
256 static const mrpt::rtti::TRuntimeClassId* _GetBaseClass(); \
257 static const mrpt::rtti::TRuntimeClassId runtimeClassId; \
260 using Ptr = std::shared_ptr<class_name>; \
261 using ConstPtr = std::shared_ptr<const class_name>; \
262 virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() \
264 static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); \
270 #define IMPLEMENTS_VIRTUAL_MRPT_OBJECT(class_name, base_class_name, NameSpace) \
271 const mrpt::rtti::TRuntimeClassId* NameSpace::class_name::_GetBaseClass() \
273 return CLASS_ID(base_class_name); \
275 const mrpt::rtti::TRuntimeClassId NameSpace::class_name::runtimeClassId = \
276 {#class_name, nullptr, &NameSpace::class_name::_GetBaseClass}; \
277 const mrpt::rtti::TRuntimeClassId* \
278 NameSpace::class_name::GetRuntimeClass() const \
280 return CLASS_ID(class_name); \
282 const mrpt::rtti::TRuntimeClassId& \
283 NameSpace::class_name::GetRuntimeClassIdStatic() \
285 return NameSpace::class_name::runtimeClassId; \
310 template <
typename CAST_TO>
313 template <
typename CAST_FROM_PTR>
314 static typename CAST_TO::Ptr
from(
const CAST_FROM_PTR& ptr)
316 return std::dynamic_pointer_cast<CAST_TO>(ptr);
void registerClass(const mrpt::rtti::TRuntimeClassId *pNewClass)
Register a class into the MRPT internal list of "CObject" descendents.
std::shared_ptr< CObject > Ptr
A structure that holds runtime class type information.
void registerAllPendingClasses()
Register all pending classes - to be called just before de-serializing an object, for example.
CLASSINIT(const mrpt::rtti::TRuntimeClassId *pNewClass)
mrpt::rtti::CObject::Ptr duplicateGetSmartPtr() const
Returns a copy of the object, indepently of its class, as a smart pointer (the newly created object w...
constexpr const mrpt::rtti::TRuntimeClassId * CLASS_ID_impl()
virtual CObject * clone() const =0
Returns a deep copy (clone) of the object, indepently of its class.
virtual const mrpt::rtti::TRuntimeClassId * GetRuntimeClass() const
Returns information about the class of an object in runtime.
std::shared_ptr< const CObject > ConstPtr
Converts a polymorphic smart pointer Base::Ptr to Derived::Ptr, in a way compatible with MRPT >=1....
static const mrpt::rtti::TRuntimeClassId runtimeClassId
static mrpt::rtti::TRuntimeClassId * _GetBaseClass()
std::vector< const mrpt::rtti::TRuntimeClassId * > getAllRegisteredClasses()
Returns a list with all the classes registered in the system through mrpt::rtti::registerClass.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
std::vector< const TRuntimeClassId * > getAllRegisteredClassesChildrenOf(const TRuntimeClassId *parent_id)
Like getAllRegisteredClasses(), but filters the list to only include children clases of a given base ...
mrpt::rtti::CObject * classFactory(const std::string &className)
Creates an object given by its registered name.
static CAST_TO::Ptr from(const CAST_FROM_PTR &ptr)
The virtual base class of all MRPT classes with a unified RTTI system.
bool derivedFrom(const TRuntimeClassId *pBaseClass) const
static bool check(const PTR &p)
mrpt::rtti::CObject * createObject() const
void registerClassCustomName(const char *customName, const TRuntimeClassId *pNewClass)
Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization ...
#define CLASS_ID(T)
Access to runtime class ID for a defined class name.
Auxiliary structure used for CObject-based RTTI.
static const mrpt::rtti::TRuntimeClassId & GetRuntimeClassIdStatic()
GLsizei const GLchar ** string
mrpt::rtti::CObject::Ptr classFactoryPtr(const std::string &className)
Like classFactory() but returns a smart pointer.
A wrapper class for pointers that can be safely copied with "=" operator without problems.
const TRuntimeClassId * findRegisteredClass(const std::string &className)
Return info about a given class by its name, or nullptr if the class is not registered.
Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at mié 12 jul 2023 10:03:34 CEST | |