#include <iostream>
#include <memory>
{
{
public:
void printName() { std::cout <<
"printName: Foo" << std::endl; }
};
{
public:
virtual void printName() { std::cout <<
"printName: BarBase" << std::endl; }
};
class Bar : public BarBase
{
public:
void printName()
override { std::cout <<
"class: Bar" << std::endl; }
{
std::cout << "specificBarMethod: reached." << std::endl;
}
};
}
{
std::cout << "RTTI Foo (static): " << id_foo->className << std::endl;
Bar::Ptr pBar = std::make_shared<Bar>();
pBar->printName();
pBase->printName();
std::cout <<
"Is Foo? => " << (
IS_DERIVED(*pObj,
Foo) ?
"Yes\n" :
"No\n");
std::cout << "Is BarBase? => "
std::cout <<
"Is Bar? => " << (
IS_DERIVED(*pObj,
Bar) ?
"Yes\n" :
"No\n");
{
pBar2->specificBarMethod();
}
}
{
{
}
}
{
{
for (const auto& cl : allClasses)
{
std::cout << "Known class: " << cl->className << ", children of "
<< (cl->getBaseClass ? cl->getBaseClass()->className
: "(none)")
<< std::endl;
}
}
{
{
pBar->specificBarMethod();
}
}
}
{
try
{
return 0;
}
catch (const std::exception& e)
{
return -1;
}
}
mrpt::rtti::CObject::Ptr classFactory(const std::string &className)
Creates an object given by its registered name.
void registerClass(const mrpt::rtti::TRuntimeClassId *pNewClass)
Register a class into the MRPT internal list of "CObject" descendents.
std::shared_ptr< CObject > Ptr
#define DEFINE_VIRTUAL_MRPT_OBJECT(class_name)
This declaration must be inserted in virtual CObject classes definition:
void Test_UserTypesFactory()
#define IS_CLASS(obj, class_name)
True if the given reference to object (derived from mrpt::rtti::CObject) is of the given class.
std::vector< const mrpt::rtti::TRuntimeClassId * > getAllRegisteredClasses()
Returns a list with all the classes registered in the system through mrpt::rtti::registerClass.
void printName() override
std::shared_ptr< MyNS ::Bar > Ptr
#define DEFINE_MRPT_OBJECT(class_name, NameSpace)
This declaration must be inserted in all CObject classes definition, within the class declaration.
IMPLEMENTS_VIRTUAL_MRPT_OBJECT(CMultiObjectiveMotionOptimizerBase, CObject, mrpt::nav) CMultiObjectiveMotionOptimizerBase
static CAST_TO::Ptr from(const CAST_FROM_PTR &ptr)
Virtual base to provide a compiler-independent RTTI system.
#define CLASS_ID_NAMESPACE(class_name, namespaceName)
std::shared_ptr< BarBase > Ptr
void registerClassCustomName(const char *customName, const TRuntimeClassId *pNewClass)
Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization ...
IMPLEMENTS_MRPT_OBJECT(CMultiObjMotionOpt_Scalarization, CMultiObjectiveMotionOptimizerBase, mrpt::nav) CMultiObjMotionOpt_Scalarization
#define CLASS_ID(T)
Access to runtime class ID for a defined class name.
#define IS_DERIVED(obj, class_name)
True if the given reference to object (derived from mrpt::rtti::CObject) is an instance of the given ...
std::string exception_to_str(const std::exception &e)
Builds a nice textual representation of a nested exception, which if generated using MRPT macros (THR...
void Test_UserTypes()
[example-define-class]
Page generated by Doxygen 1.8.17 for MRPT 2.0.4 at Fri Jul 17 08:43:33 UTC 2020 | |