| File | Date | Author | Commit |
|---|---|---|---|
| main | 2023-09-21 |
|
[66d370] ver-0000 |
| CMakeLists.txt | 2023-09-21 |
|
[66d370] ver-0000 |
| README.md | 2023-09-21 |
|
[66d370] ver-0000 |
| pytest_examples_cxx_rtti.py | 2023-09-21 |
|
[66d370] ver-0000 |
| sdkconfig.ci | 2023-09-21 |
|
[66d370] ver-0000 |
| sdkconfig.defaults | 2023-09-21 |
|
[66d370] ver-0000 |
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
|---|---|---|---|---|---|---|---|---|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
This example demonstrates usage of the RTTI feature in ESP-IDF.
By default, RTTI support is disabled in ESP-IDF. It can be enabled using CONFIG_COMPILER_CXX_RTTI configuration option.
In this example, sdkconfig.defaults file sets CONFIG_COMPILER_CXX_RTTI option. This enables compile time support for RTTI (-frtti compiler flag).
The example prints demangled type names of a few objects and functions, obtained from typeinfo().name. The example also generates several objects of two classes, derived from a common base class. For each object, it is demonstrated that dynamic_cast behaves as expected, returning non-NULL when casting to the real object type, and NULL when casting to a different type.
To run this example, no additional configuration is necessary.
Build the project and flash it to the board, then run monitor tool to view serial output:
idf.py -p PORT flash monitor
(Replace PORT with the name of the serial port to use.)
(To exit the serial monitor, type Ctrl-].)
See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
Type names of a few objects:
Type name of std::cout is: std::ostream
Type name of std::cin is: std::istream
Type of app_main is: void ()
Type name of a lambda function is: app_main::{lambda(int, int)#1}
Generating 5 random objects and printing their types:
obj->name() is: DerivedB
typeid(*obj).name() is: DerivedB
dynamic_cast<DerivedA*>(obj)=0
dynamic_cast<DerivedB*>(obj)=0x3ffb7e88
obj->name() is: DerivedB
typeid(*obj).name() is: DerivedB
dynamic_cast<DerivedA*>(obj)=0
dynamic_cast<DerivedB*>(obj)=0x3ffb7e9c
obj->name() is: DerivedA
typeid(*obj).name() is: DerivedA
dynamic_cast<DerivedA*>(obj)=0x3ffb7eb0
dynamic_cast<DerivedB*>(obj)=0
obj->name() is: DerivedB
typeid(*obj).name() is: DerivedB
dynamic_cast<DerivedA*>(obj)=0
dynamic_cast<DerivedB*>(obj)=0x3ffb7ec4
obj->name() is: DerivedA
typeid(*obj).name() is: DerivedA
dynamic_cast<DerivedA*>(obj)=0x3ffb7ed8
dynamic_cast<DerivedB*>(obj)=0
Example finished.