MRPT  2.0.4
rtti_example1/test.cpp
/* +------------------------------------------------------------------------+
| Mobile Robot Programming Toolkit (MRPT) |
| https://www.mrpt.org/ |
| |
| Copyright (c) 2005-2020, Individual contributors, see AUTHORS file |
| See: https://www.mrpt.org/Authors - All rights reserved. |
| Released under BSD License. See: https://www.mrpt.org/License |
+------------------------------------------------------------------------+ */
/** \example rtti_example1/test.cpp */
//! [example-define-class]
#include <iostream>
#include <memory>
namespace MyNS
{
class Foo : public mrpt::rtti::CObject
{
public:
Foo() {}
void printName() { std::cout << "printName: Foo" << std::endl; }
};
class BarBase : public mrpt::rtti::CObject
{
public:
BarBase() {}
virtual void printName() { std::cout << "printName: BarBase" << std::endl; }
};
class Bar : public BarBase
{
public:
Bar() {}
void printName() override { std::cout << "class: Bar" << std::endl; }
{
std::cout << "specificBarMethod: reached." << std::endl;
}
};
} // namespace MyNS
//! [example-define-class]
//! [example-define-class-test]
{
using namespace MyNS;
const auto id_foo = CLASS_ID(Foo);
std::cout << "RTTI Foo (static): " << id_foo->className << std::endl;
// Pointers:
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? => "
<< (IS_DERIVED(*pObj, BarBase) ? "Yes\n" : "No\n");
std::cout << "Is Bar? => " << (IS_DERIVED(*pObj, Bar) ? "Yes\n" : "No\n");
if (IS_CLASS(*pObj, Bar))
{
auto pBar2 = mrpt::ptr_cast<Bar>::from(pObj);
pBar2->specificBarMethod();
}
}
//! [example-define-class-test]
//! [example-factory]
{
// Register with explicit namespace:
{
// Register without explicit namespace:
using namespace MyNS;
}
}
{
// Test register:
{
const auto& allClasses = mrpt::rtti::getAllRegisteredClasses();
for (const auto& cl : allClasses)
{
std::cout << "Known class: " << cl->className << ", children of "
<< (cl->getBaseClass ? cl->getBaseClass()->className
: "(none)")
<< std::endl;
}
}
// Test factory:
{
if (IS_CLASS(*pObj, MyNS::Bar))
{
pBar->specificBarMethod();
}
}
}
//! [example-factory]
int main(int argc, char** argv)
{
try
{
return 0;
}
catch (const std::exception& e)
{
std::cerr << "MRPT error: " << mrpt::exception_to_str(e) << std::endl;
return -1;
}
}
CObject.h
mrpt::rtti::classFactory
mrpt::rtti::CObject::Ptr classFactory(const std::string &className)
Creates an object given by its registered name.
Definition: CObject.cpp:108
do_register
void do_register()
Definition: rtti_unittest.cpp:41
mrpt::rtti::registerClass
void registerClass(const mrpt::rtti::TRuntimeClassId *pNewClass)
Register a class into the MRPT internal list of "CObject" descendents.
Definition: internal_class_registry.cpp:183
MyNS::BarBase::printName
virtual void printName()
Definition: vision_stereo_rectify/test.cpp:33
mrpt::rtti::CObject::Ptr
std::shared_ptr< CObject > Ptr
Definition: CObject.h:184
DEFINE_VIRTUAL_MRPT_OBJECT
#define DEFINE_VIRTUAL_MRPT_OBJECT(class_name)
This declaration must be inserted in virtual CObject classes definition:
Definition: CObject.h:293
Foo
Definition: EigenAlignment_unittest.cpp:38
MyNS::Foo::Foo
Foo()
Definition: vision_stereo_rectify/test.cpp:21
MyNS
[example-define-class]
Definition: rtti_unittest.cpp:14
Test_UserTypesFactory
void Test_UserTypesFactory()
Definition: vision_stereo_rectify/test.cpp:98
IS_CLASS
#define IS_CLASS(obj, class_name)
True if the given reference to object (derived from mrpt::rtti::CObject) is of the given class.
Definition: CObject.h:146
mrpt::rtti::getAllRegisteredClasses
std::vector< const mrpt::rtti::TRuntimeClassId * > getAllRegisteredClasses()
Returns a list with all the classes registered in the system through mrpt::rtti::registerClass.
Definition: internal_class_registry.cpp:216
MyNS::Bar::printName
void printName() override
Definition: vision_stereo_rectify/test.cpp:42
MyNS::Bar::Bar
Bar()
Definition: vision_stereo_rectify/test.cpp:39
main
int main()
Definition: vision_stereo_rectify/test.cpp:78
MyNS::Bar::Ptr
std::shared_ptr< MyNS ::Bar > Ptr
Definition: vision_stereo_rectify/test.cpp:40
DEFINE_MRPT_OBJECT
#define DEFINE_MRPT_OBJECT(class_name, NameSpace)
This declaration must be inserted in all CObject classes definition, within the class declaration.
Definition: CObject.h:211
IMPLEMENTS_VIRTUAL_MRPT_OBJECT
IMPLEMENTS_VIRTUAL_MRPT_OBJECT(CMultiObjectiveMotionOptimizerBase, CObject, mrpt::nav) CMultiObjectiveMotionOptimizerBase
Definition: CMultiObjectiveMotionOptimizerBase.cpp:18
MyNS::Foo
Definition: serialization/src/CSerializable_unittest.cpp:19
mrpt::ptr_cast::from
static CAST_TO::Ptr from(const CAST_FROM_PTR &ptr)
Definition: CObject.h:356
MyNS::BarBase::BarBase
BarBase()
Definition: vision_stereo_rectify/test.cpp:30
mrpt::rtti::CObject
Virtual base to provide a compiler-independent RTTI system.
Definition: CObject.h:177
MyNS::Bar
Definition: vision_stereo_rectify/test.cpp:36
MyNS::Bar::specificBarMethod
void specificBarMethod()
Definition: vision_stereo_rectify/test.cpp:43
CLASS_ID_NAMESPACE
#define CLASS_ID_NAMESPACE(class_name, namespaceName)
Definition: CObject.h:105
argv
const char * argv[]
Definition: RawlogGrabberApp_unittest.cpp:50
MyNS::BarBase::Ptr
std::shared_ptr< BarBase > Ptr
Definition: vision_stereo_rectify/test.cpp:31
mrpt::rtti::registerClassCustomName
void registerClassCustomName(const char *customName, const TRuntimeClassId *pNewClass)
Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization ...
Definition: internal_class_registry.cpp:206
MyNS::BarBase
Definition: vision_stereo_rectify/test.cpp:27
IMPLEMENTS_MRPT_OBJECT
IMPLEMENTS_MRPT_OBJECT(CMultiObjMotionOpt_Scalarization, CMultiObjectiveMotionOptimizerBase, mrpt::nav) CMultiObjMotionOpt_Scalarization
Definition: CMultiObjMotionOpt_Scalarization.cpp:16
CLASS_ID
#define CLASS_ID(T)
Access to runtime class ID for a defined class name.
Definition: CObject.h:102
argc
const int argc
Definition: RawlogGrabberApp_unittest.cpp:51
IS_DERIVED
#define IS_DERIVED(obj, class_name)
True if the given reference to object (derived from mrpt::rtti::CObject) is an instance of the given ...
Definition: CObject.h:151
mrpt::exception_to_str
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...
Definition: exceptions.cpp:59
Test_UserTypes
void Test_UserTypes()
[example-define-class]
Definition: vision_stereo_rectify/test.cpp:57
MyNS::Foo::printName
void printName()
Definition: vision_stereo_rectify/test.cpp:24



Page generated by Doxygen 1.8.17 for MRPT 2.0.4 at Fri Jul 17 08:43:33 UTC 2020