Modern C++ in practice
Goals Practical experience of C++ best practices, idioms and details Design patterns in C++ Generic, functional and template programming Using boost and STL Utilize APIs, books and mailing lists Coherent coding style and get to know each other
Why bother with details? Cons More than 20 years old Backwards compatible with C Lots of mistakes in both language and library Very complex Pros Powerful features Well spread Vivid community Rapidly developing
Polymorphism in C++ Virtual keyword Function pointers Function overloading Implicit type conversion Concepts Policy classes Argument dependent lookup (ADL) Partial template specialization
C++ programming Object oriented programming Generic programming Functional programming Template metaprogramming Blend these paradigms to acheive code that is Simple and easily read Decoupled and testable Robust to change Reusable
Roadmap Very unclear Start today and see how it evolves Think about: What you want to learn? Should we add or remove goals?
Today boost::variant boost::signals Discuss slots n’ signals relation to bind and function My observable class Pair-wise design of a toy problem Discuss design differences
Toy problem: Cat n’ Rat Design logical interfaces and concepts for a simple game 2D discrete coordinate world Contains cats, rats, cheese and obstacles Move events appear for cats and rats Collision detection, not handling
Toy problem: Focus Focus the design on When working try to Low coupling, high cohesion Robustness to future changes Event driven information flow When working try to Use boost and STL Push error checking towards compile and link time Write generic code when it doesn’t complicate design
Future suggestions Implement logical model Design and maybe implement: Text view Collision handling Serialization Simple client/server Extend game functionality Implement message distributor