Difference between revisions of "Intermediate C++ Game Programming Tutorial 19"
From Chilipedia
(→Video Timestamp Index) |
(→Video Timestamp Index) |
||
Line 12: | Line 12: | ||
* Using <code>dynamic_cast<new-type>(expression)</code> to figure out to what derived type a pointer to a polymorphic base type is actually pointing [https://youtu.be/g-NGBFCn3co?t=54s 0:54] | * Using <code>dynamic_cast<new-type>(expression)</code> to figure out to what derived type a pointer to a polymorphic base type is actually pointing [https://youtu.be/g-NGBFCn3co?t=54s 0:54] | ||
** A dynamic cast can be used on pointers and on references | ** A dynamic cast can be used on pointers and on references | ||
− | ** To cast | + | ** To cast (from and to) a pointer, use <code>if( DerivedClass* ptr_temp = dynamic_cast<DerivedClass*>(ptr_to_baseClassObject) )</code><br />(note 1: if the cast fails, it will return a nullptr of the DerivedClass type)<br />(note 2: nullptr is #defined to 0 and thus evaluates to false inside an if statement) |
− | ** To cast | + | ** To cast (from and to) a reference, you can use <code>DerivedClass& val_temp = dynamic_cast<DerivedClass&>(baseClassObject)</code><br />(but that will throw an exception when the cast fails so it cannot be used inside an if statement) |
** A dynamic cast can be a costly operation (depends on the inheritance tree, nature of the cast, compiler) | ** A dynamic cast can be a costly operation (depends on the inheritance tree, nature of the cast, compiler) | ||
** Dynamic cast only works for types that have at least one virtual function (the operation needs information from the vtable) | ** Dynamic cast only works for types that have at least one virtual function (the operation needs information from the vtable) |
Revision as of 03:17, 16 October 2019
In this video Chili teaches us how to figure out what our polymorphic pointers are actually pointing to (aka "type discovery"). Just note that although we can do this, it is generally a weaksauce way to go about things. Virtual functions are 1000% more hype than type discovery bullshit. Oh yeah, we also finally see all the C++ style casts united.
Topics Covered
-
dynamic_cast<T*>
anddynamic_cast<T&>
-
const_cast
- Overview of all C++ style casts
- RTTI with
typeid()
- The
type_info
class
Video Timestamp Index
- Using
dynamic_cast<new-type>(expression)
to figure out to what derived type a pointer to a polymorphic base type is actually pointing 0:54- A dynamic cast can be used on pointers and on references
- To cast (from and to) a pointer, use
if( DerivedClass* ptr_temp = dynamic_cast<DerivedClass*>(ptr_to_baseClassObject) )
(note 1: if the cast fails, it will return a nullptr of the DerivedClass type)
(note 2: nullptr is #defined to 0 and thus evaluates to false inside an if statement) - To cast (from and to) a reference, you can use
DerivedClass& val_temp = dynamic_cast<DerivedClass&>(baseClassObject)
(but that will throw an exception when the cast fails so it cannot be used inside an if statement) - A dynamic cast can be a costly operation (depends on the inheritance tree, nature of the cast, compiler)
- Dynamic cast only works for types that have at least one virtual function (the operation needs information from the vtable)
- Using a static cast 6:20
- WORK-IN-PROGRESS
Source Code
Note that the code for this video is in a different branch called "casting". You will not find it in the master branch.