modern_cpp_workshop_1

Download Report

Transcript modern_cpp_workshop_1

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
• 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