mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	 31edd48b43
			
		
	
	31edd48b43
	
	
	
		
			
			* moved C++ examples to a new cxx folder in examples * added experimental C++ component * added ESPException class to the C++ experimental component * added test cases for ESPException and corresponding test macros
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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.
 | |
| ```
 |