Handmade Hero»Episode Guide
CRTP and Library Design
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:08Recap yesterday's graphics driver crash and determine to set up an external streaming system
0:08Recap yesterday's graphics driver crash and determine to set up an external streaming system
0:08Recap yesterday's graphics driver crash and determine to set up an external streaming system
4:20Invite questions and suggestions
4:20Invite questions and suggestions
4:20Invite questions and suggestions
6:38vaualbus How do you write a program that is graphics driver crash aware?
🗪
6:38vaualbus How do you write a program that is graphics driver crash aware?
🗪
6:38vaualbus How do you write a program that is graphics driver crash aware?
🗪
8:36Install and run Process Explorer, and consider graphics driver crashes1
8:36Install and run Process Explorer, and consider graphics driver crashes1
8:36Install and run Process Explorer, and consider graphics driver crashes1
14:37Making your app graphics card crash proof: 1) Always check for valid contexts
14:37Making your app graphics card crash proof: 1) Always check for valid contexts
14:37Making your app graphics card crash proof: 1) Always check for valid contexts
15:45Making your app graphics card crash proof: 2) Use fault handlers
15:45Making your app graphics card crash proof: 2) Use fault handlers
15:45Making your app graphics card crash proof: 2) Use fault handlers
16:28How OBS could handle faults, just protect and flush the stream on crash
16:28How OBS could handle faults, just protect and flush the stream on crash
16:28How OBS could handle faults, just protect and flush the stream on crash
17:25Shutting down gracefully and relaunching your application
17:25Shutting down gracefully and relaunching your application
17:25Shutting down gracefully and relaunching your application
18:40crazy_coder456 How many episodes remaining, estimate?
🗪
18:40crazy_coder456 How many episodes remaining, estimate?
🗪
18:40crazy_coder456 How many episodes remaining, estimate?
🗪
19:39sgtrumbi Do you use C++ features like templates? Do you use polymorphism in your own projects?
🗪
19:39sgtrumbi Do you use C++ features like templates? Do you use polymorphism in your own projects?
🗪
19:39sgtrumbi Do you use C++ features like templates? Do you use polymorphism in your own projects?
🗪
22:47bpaf What do you think about the CRTP to do polymorphism?2
🗪
22:47bpaf What do you think about the CRTP to do polymorphism?2
🗪
22:47bpaf What do you think about the CRTP to do polymorphism?2
🗪
25:18crtp.cpp: Curiously recurring template pattern
25:18crtp.cpp: Curiously recurring template pattern
25:18crtp.cpp: Curiously recurring template pattern
27:28crtp.cpp: The template<struct Something> syntax
27:28crtp.cpp: The template<struct Something> syntax
27:28crtp.cpp: The template<struct Something> syntax
31:29Consider ramifications of templates
31:29Consider ramifications of templates
31:29Consider ramifications of templates
34:40crtp.cpp: Using a union in a parent struct to contain entity types
34:40crtp.cpp: Using a union in a parent struct to contain entity types
34:40crtp.cpp: Using a union in a parent struct to contain entity types
37:10crtp.cpp: C++'s "struct entity_ghost : public entity" inheritance syntax
37:10crtp.cpp: C++'s "struct entity_ghost : public entity" inheritance syntax
37:10crtp.cpp: C++'s "struct entity_ghost : public entity" inheritance syntax
40:59crtp.cpp: Consider ramifications of the inheritance model
40:59crtp.cpp: Consider ramifications of the inheritance model
40:59crtp.cpp: Consider ramifications of the inheritance model
45:42crtp.cpp: Making the derived class more primal
45:42crtp.cpp: Making the derived class more primal
45:42crtp.cpp: Making the derived class more primal
50:06Polymorphic copy construction, virtual functions and the copy constructor3
50:06Polymorphic copy construction, virtual functions and the copy constructor3
50:06Polymorphic copy construction, virtual functions and the copy constructor3
56:44crtp.cpp: Spec out our desired Clone() function, using a union in the parent shape struct to contain shape_rectangle and shape_circle, and a switch statement in Clone()
56:44crtp.cpp: Spec out our desired Clone() function, using a union in the parent shape struct to contain shape_rectangle and shape_circle, and a switch statement in Clone()
56:44crtp.cpp: Spec out our desired Clone() function, using a union in the parent shape struct to contain shape_rectangle and shape_circle, and a switch statement in Clone()
1:00:20crtp2.cpp: Attempt this in a C++ way
1:00:20crtp2.cpp: Attempt this in a C++ way
1:00:20crtp2.cpp: Attempt this in a C++ way
1:04:03crtp2.cpp: Run-time type information4
1:04:03crtp2.cpp: Run-time type information4
1:04:03crtp2.cpp: Run-time type information4
1:09:34crtp2.cpp: Virtual function call for Clone() in the structs
1:09:34crtp2.cpp: Virtual function call for Clone() in the structs
1:09:34crtp2.cpp: Virtual function call for Clone() in the structs
1:11:08crtp2.cpp: Base class containing a pure virtual function for cloning, and a shape_cloner templatised struct
1:11:08crtp2.cpp: Base class containing a pure virtual function for cloning, and a shape_cloner templatised struct
1:11:08crtp2.cpp: Base class containing a pure virtual function for cloning, and a shape_cloner templatised struct
1:14:57bpaf I didn't want to use virtual functions, so when I found this I was super happy
🗪
1:14:57bpaf I didn't want to use virtual functions, so when I found this I was super happy
🗪
1:14:57bpaf I didn't want to use virtual functions, so when I found this I was super happy
🗪
1:15:46Polymorphic chaining5
1:15:46Polymorphic chaining5
1:15:46Polymorphic chaining5
1:20:18bpaf My use case is: I write a library, and I want users of the library to provide their own structs for me to do my library business on, so I need polymorphism one way or another and, since it's a simulation, I want to remove all of the runtime cost I can incur
🗪
1:20:18bpaf My use case is: I write a library, and I want users of the library to provide their own structs for me to do my library business on, so I need polymorphism one way or another and, since it's a simulation, I want to remove all of the runtime cost I can incur
🗪
1:20:18bpaf My use case is: I write a library, and I want users of the library to provide their own structs for me to do my library business on, so I need polymorphism one way or another and, since it's a simulation, I want to remove all of the runtime cost I can incur
🗪
1:21:56bpaf You got it, I have to call them back
🗪
1:21:56bpaf You got it, I have to call them back
🗪
1:21:56bpaf You got it, I have to call them back
🗪
1:22:17bpaf They define a game, and I define in the library a genetic programming framework to find players that play well at them
🗪
1:22:17bpaf They define a game, and I define in the library a genetic programming framework to find players that play well at them
🗪
1:22:17bpaf They define a game, and I define in the library a genetic programming framework to find players that play well at them
🗪
1:23:27bpaf In particular I create trees (S-expressions) that contain terminals that are defined by the game, which operate on the game state, and then evaluate those games that contains IF, >, == etc, as well as the game terminals, and then make players out of random trees, and do tournaments between each other
🗪
1:23:27bpaf In particular I create trees (S-expressions) that contain terminals that are defined by the game, which operate on the game state, and then evaluate those games that contains IF, >, == etc, as well as the game terminals, and then make players out of random trees, and do tournaments between each other
🗪
1:23:27bpaf In particular I create trees (S-expressions) that contain terminals that are defined by the game, which operate on the game state, and then evaluate those games that contains IF, >, == etc, as well as the game terminals, and then make players out of random trees, and do tournaments between each other
🗪
1:24:30crtp2.cpp: Spec out an idea for bpaf's library, using an operate_type enum with the library ops occupying the high values
1:24:30crtp2.cpp: Spec out an idea for bpaf's library, using an operate_type enum with the library ops occupying the high values
1:24:30crtp2.cpp: Spec out an idea for bpaf's library, using an operate_type enum with the library ops occupying the high values
1:28:27bpaf How would you pass the information needed to create random operations to the library, from the user, in this framework?
🗪
1:28:27bpaf How would you pass the information needed to create random operations to the library, from the user, in this framework?
🗪
1:28:27bpaf How would you pass the information needed to create random operations to the library, from the user, in this framework?
🗪
1:28:43crtp2.cpp: Spec out CreateRandomOpCallback()
1:28:43crtp2.cpp: Spec out CreateRandomOpCallback()
1:28:43crtp2.cpp: Spec out CreateRandomOpCallback()
1:31:14Consider library design
1:31:14Consider library design
1:31:14Consider library design
1:36:12bpaf The thing I liked about the CRSP approach is that it makes somewhat clear what the "interface" is, you have to implement these methods, and have this data, and I can do the genetic tournament job
🗪
1:36:12bpaf The thing I liked about the CRSP approach is that it makes somewhat clear what the "interface" is, you have to implement these methods, and have this data, and I can do the genetic tournament job
🗪
1:36:12bpaf The thing I liked about the CRSP approach is that it makes somewhat clear what the "interface" is, you have to implement these methods, and have this data, and I can do the genetic tournament job
🗪
1:38:17bpaf Your idea is interesting: you extend the enum. It's not that hard to understand
🗪
1:38:17bpaf Your idea is interesting: you extend the enum. It's not that hard to understand
🗪
1:38:17bpaf Your idea is interesting: you extend the enum. It's not that hard to understand
🗪
1:39:46bpaf Here's a thing, if I want to generate trees for different choices, that need different languages, I use multiple template parameters
🗪
1:39:46bpaf Here's a thing, if I want to generate trees for different choices, that need different languages, I use multiple template parameters
🗪
1:39:46bpaf Here's a thing, if I want to generate trees for different choices, that need different languages, I use multiple template parameters
🗪
1:40:31bpaf By different choices I mean, you could have two choices for a game turn, and you might want to have trees that use terminals that look at different aspects of the game
🗪
1:40:31bpaf By different choices I mean, you could have two choices for a game turn, and you might want to have trees that use terminals that look at different aspects of the game
🗪
1:40:31bpaf By different choices I mean, you could have two choices for a game turn, and you might want to have trees that use terminals that look at different aspects of the game
🗪
1:41:05bpaf For example, imagine a game when you have the choice to play or pass, and if you decide to play you then have to make a move
🗪
1:41:05bpaf For example, imagine a game when you have the choice to play or pass, and if you decide to play you then have to make a move
🗪
1:41:05bpaf For example, imagine a game when you have the choice to play or pass, and if you decide to play you then have to make a move
🗪
1:41:17crtp2.cpp: Spec out a GameStateAllowsMeToDoThese condition
1:41:17crtp2.cpp: Spec out a GameStateAllowsMeToDoThese condition
1:41:17crtp2.cpp: Spec out a GameStateAllowsMeToDoThese condition
1:42:47bpaf No, the player doesn't generate random operations, the library generates random trees, and evaluates them
🗪
1:42:47bpaf No, the player doesn't generate random operations, the library generates random trees, and evaluates them
🗪
1:42:47bpaf No, the player doesn't generate random operations, the library generates random trees, and evaluates them
🗪
1:43:30bpaf Hehe, yeah, it's complicated
🗪
1:43:30bpaf Hehe, yeah, it's complicated
🗪
1:43:30bpaf Hehe, yeah, it's complicated
🗪
1:43:57On picking the things that your library does and does not do
1:43:57On picking the things that your library does and does not do
1:43:57On picking the things that your library does and does not do
1:47:49Blackboard: Node Graph Disaster Zone
1:47:49Blackboard: Node Graph Disaster Zone
1:47:49Blackboard: Node Graph Disaster Zone
1:53:28Wind it down
1:53:28Wind it down
1:53:28Wind it down