Main MRPT website > C++ reference for MRPT 1.9.9
test.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 /** \example rtti_example1/test.cpp */
10 
11 //! [example-define-class]
12 #include <mrpt/rtti/CObject.h>
13 #include <iostream>
14 #include <memory>
15 
16 namespace MyNS
17 {
18 class Foo : public mrpt::rtti::CObject
19 {
20  public:
21  Foo() {}
23 
24  void printName() { std::cout << "printName: Foo" << std::endl; }
25 };
26 
27 class BarBase : public mrpt::rtti::CObject
28 {
29  public:
30  BarBase() {}
32 
33  virtual void printName() { std::cout << "printName: BarBase" << std::endl; }
34 };
35 
36 class Bar : public BarBase
37 {
38  public:
39  Bar() {}
41 
42  virtual void printName() override
43  {
44  std::cout << "class: Bar" << std::endl;
45  }
46  void specificBarMethod()
47  {
48  std::cout << "specificBarMethod: reached." << std::endl;
49  }
50 };
51 }
52 
56 
57 //! [example-define-class]
58 
59 //! [example-define-class-test]
60 void Test_UserTypes()
61 {
62  using namespace MyNS;
63  const auto id_foo = CLASS_ID(Foo);
64  std::cout << "RTTI Foo (static): " << id_foo->className << std::endl;
65 
66  // Pointers:
67  Bar::Ptr pBar = std::make_shared<Bar>();
71 
72  pBar->printName();
73  pBase->printName();
74  std::cout << "Is Foo? => " << (IS_DERIVED(pObj, Foo) ? "Yes" : "No")
75  << std::endl;
76  std::cout << "Is BarBase? => " << (IS_DERIVED(pObj, BarBase) ? "Yes" : "No")
77  << std::endl;
78  std::cout << "Is Bar? => " << (IS_DERIVED(pObj, Bar) ? "Yes" : "No")
79  << std::endl;
80  if (IS_CLASS(pObj, Bar))
81  {
82  auto pBar = mrpt::ptr_cast<Bar>::from(pObj);
83  pBar->specificBarMethod();
84  }
85 }
86 
87 //! [example-define-class-test]
88 
89 //! [example-factory]
90 void do_register()
91 {
92  // Register with explicit namespace:
94  {
95  // Register without explicit namespace:
96  using namespace MyNS;
100  }
101 }
102 
104 {
105  do_register();
106 
107  // Test register:
108  {
109  const auto& allClasses = mrpt::rtti::getAllRegisteredClasses();
110  for (const auto& cl : allClasses)
111  {
112  std::cout << "Known class: " << cl->className << ", children of "
113  << (cl->getBaseClass ? cl->getBaseClass()->className
114  : "(none)")
115  << std::endl;
116  }
117  }
118 
119  // Test factory:
120  {
122  mrpt::rtti::classFactoryPtr("MyNS::Bar");
123  if (IS_CLASS(pObj, MyNS::Bar))
124  {
125  auto pBar = mrpt::ptr_cast<MyNS::Bar>::from(pObj);
126  pBar->specificBarMethod();
127  }
128  }
129 }
130 
131 //! [example-factory]
132 
133 int main(int argc, char** argv)
134 {
135  try
136  {
137  Test_UserTypes();
139  return 0;
140  }
141  catch (std::exception& e)
142  {
143  std::cout << "Exception: " << e.what() << std::endl;
144  return -1;
145  }
146 }
CObject.h
do_register
void do_register()
Definition: rtti_unittest.cpp:25
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:155
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:149
DEFINE_VIRTUAL_MRPT_OBJECT
#define DEFINE_VIRTUAL_MRPT_OBJECT(class_name)
This declaration must be inserted in virtual CObject classes definition:
Definition: CObject.h:252
Foo
Definition: stl_serialize_unittest.cpp:64
IS_DERIVED
#define IS_DERIVED(ptrObj, class_name)
Evaluates to true if a pointer to an object (derived from mrpt::rtti::CObject) is an instance of the ...
Definition: CObject.h:109
MyNS::Foo::Foo
Foo()
Definition: vision_stereo_rectify/test.cpp:21
MyNS
[example-define-class]
Definition: rtti_unittest.cpp:13
Test_UserTypesFactory
void Test_UserTypesFactory()
Definition: vision_stereo_rectify/test.cpp:103
MyNS::Bar::printName
virtual void printName() override
Definition: vision_stereo_rectify/test.cpp:42
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:178
MyNS::Bar::Bar
Bar()
Definition: vision_stereo_rectify/test.cpp:39
main
int main()
Definition: vision_stereo_rectify/test.cpp:78
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:314
MyNS::BarBase::BarBase
BarBase()
Definition: vision_stereo_rectify/test.cpp:30
mrpt::rtti::CObject
The virtual base class of all MRPT classes with a unified RTTI system.
Definition: CObject.h:142
MyNS::Bar
Definition: vision_stereo_rectify/test.cpp:36
IS_CLASS
#define IS_CLASS(ptrObj, class_name)
Evaluates to true if the given pointer to an object (derived from mrpt::rtti::CObject) is of the give...
Definition: CObject.h:103
MyNS::Bar::specificBarMethod
void specificBarMethod()
Definition: vision_stereo_rectify/test.cpp:46
CLASS_ID_NAMESPACE
#define CLASS_ID_NAMESPACE(class_name, namespaceName)
Definition: CObject.h:88
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:168
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:85
Test_UserTypes
void Test_UserTypes()
[example-define-class]
Definition: vision_stereo_rectify/test.cpp:60
MyNS::Foo::printName
void printName()
Definition: vision_stereo_rectify/test.cpp:24
MyNS::Bar::Ptr
std::shared_ptr< Bar > Ptr
Definition: vision_stereo_rectify/test.cpp:40
mrpt::rtti::classFactoryPtr
mrpt::rtti::CObject::Ptr classFactoryPtr(const std::string &className)
Like classFactory() but returns a smart pointer.
Definition: CObject.cpp:116
DEFINE_MRPT_OBJECT
#define DEFINE_MRPT_OBJECT(class_name)
This declaration must be inserted in all CObject classes definition, within the class declaration.
Definition: CObject.h:176



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