Difference between revisions of "Intermediate C++ Game Programming Tutorial 22"

From Chilipedia
Jump to: navigation, search
(Video Timestamp Index)
(Video Timestamp Index)
 
Line 88: Line 88:
 
* Exceptions, applied in practice [[RPG Project Twin]] in the Chili Framework [https://youtu.be/_6G5yDgoWiA?t=0m10s 0:10]
 
* Exceptions, applied in practice [[RPG Project Twin]] in the Chili Framework [https://youtu.be/_6G5yDgoWiA?t=0m10s 0:10]
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
** A custom class <code>ChiliException</code> was defined (not recommended) that holds message, filename and line number information and virtual functions for information getters defined in derived classes
+
** A custom class <code>ChiliException</code> is defined (not recommended, rather inherit from <code>std::exception</code>) that holds message, filename and line number information and virtual functions for information getters defined in derived classes
** An inner class <code>Graphics::Exception</code> was defined that inherits from <code>ChiliException</code> and adds a data member of type <code>HRESULT></code> (used in DirectX)
+
** An inner class <code>Graphics::Exception</code> is defined that inherits from <code>ChiliException</code> and adds a data member of type <code>HRESULT></code> (used in DirectX)
 
** The Windows API doesn't use exceptions, so individual tests for every function using <code>FAILED</code> calls are used to throw exceptions. Macros such as <code>CHILI_GFX_EXCEPTION()</code> are used to generate the exceptions
 
** The Windows API doesn't use exceptions, so individual tests for every function using <code>FAILED</code> calls are used to throw exceptions. Macros such as <code>CHILI_GFX_EXCEPTION()</code> are used to generate the exceptions
 
** In <code>Main.cpp</code>, Chili uses a <code>try{ }</code> inside another <code>try{ }</code>. The first is used to test if the creation of a <code>MainWindow</code> object succeeds, the second to throw exceptions using <code>wnd.ShowMessageBox()</code> of that <code>MainWindow</code> class
 
** In <code>Main.cpp</code>, Chili uses a <code>try{ }</code> inside another <code>try{ }</code>. The first is used to test if the creation of a <code>MainWindow</code> object succeeds, the second to throw exceptions using <code>wnd.ShowMessageBox()</code> of that <code>MainWindow</code> class

Latest revision as of 05:59, 25 November 2019

In this video we learn how to use C++ exceptions to take our error handling to the next level. There is a lot of fear and ignorance surrounding exceptions among "C++ Programmers", and Chili's goal here is to elevate you guys above the shit-tier level to coders who can actually use this feature to its full extent. The second part of this tutorial will give concrete, practical examples of using exceptions in an actual game scenario.

Topics Covered

  • Basic exception trying throwing and catching
  • Exceptions 'bubbling up'
  • Rethrowing with throw
  • catch(...)
  • std::exception and its derivatives
  • Polymorphism in exception handling
  • Exceptions and destructors
  • noexcept and move constuctors vs. standard containers
  • Throw by value, catch by const reference

Video Timestamp Index

Tutorial 22 Part 1

[Expand]
  • Intro: exceptions are the main way of handling errors in C++ 0:10
  • Comparing error handling with and without exceptions 1:40
  • Example code to demonstrate try, throw, catch of a std::runtime_error("...") 3:53
  • Use catch(...) to catch any uncaught excepions 8:55
  • Good practice: only throw exception objects that inherit from the std::exception class 9:51
  • std::exception and its derivatives 10:49
  • Unwinding the stack: what happens to objects when throwing out of scope 13:39
  • Exceptions and destructors 17:17
  • Move semantics and containers 18:34

Tutorial 22 Part 2

[Expand]
  • The use of macros to generate exceptions 4:22
  • The use of the HRESULT function 5:42
  • Working with streams (std::ifstream file and exceptions in the Sound class 7:05
  • Recovering from an exception 9:33
  • Recap of main take-aways 11:32
  • Homework assignment 14:06

Extra Discussion

I had an interesting exchange with a viewer, and made a bit of a writeup here: essay time.

Source Code

See also