100 likes | 200 Vues
Dive into the world of modern C++ programming by exploring best practices, design patterns, and advanced concepts like polymorphism and template metaprogramming. Learn to create robust, decoupled, and reusable code by blending object-oriented, generic, and functional programming paradigms. With a focus on practical experience and detailed insights, this guide aims to enhance your skills and understanding of C++ development. Start your journey today and evolve with the rapidly developing C++ community.
E N D
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 • 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