 66fb5a29bb
			
		
	
	66fb5a29bb
	
	
	
		
			
			Apply the pre-commit hook whitespace fixes to all files in the repo. (Line endings, blank lines at end of file, trailing whitespace)
Example: C++ run-time type info (RTTI)
(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.
How to use example
Configure the project
To run this example, no additional configuration is necessary.
Build and Flash
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.
Example Output
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.