![](https://csdnimg.cn/release/download_crawler_static/9314451/bg11.jpg)
3.5 Basic Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6 Basic Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7 nullptr Replaces NULL .......................... 40
3.8 Generalized Constant Expressions with constexpr ....... 41
3.9 static_assert ............................... 42
3.10 Using <limits>................................ 43
3.11 std::array .................................. 43
3.12 Basic STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.13 <numeric> ................................... 45
3.14 atomic_load() and atomic_store() ............. 46
3.15 Digit Separators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.16 Binary Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.17 User-Defined Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4 Object-Oriented Techniques for Microcontrollers ............. 51
4.1 Object Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Objects an d Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4 Dynamic Polymorphism. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.5 The Real Overhead of Dynamic Polymorphism . . . . . . . . . . . 60
4.6 Pure Virtual and Abstract. . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.7 Class Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.8 Non-Copyable Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.9 Constant Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.10 Static Constant Integral Members . . . . . . . . . . . . . . . . . . . . . 68
4.11 Class Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.12 Virtual Is Unavailable in the Base Class Constructor . . . . . . . . 71
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5 C++ Templates for Microcontrollers ...................... 75
5.1 Template Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2 Template Scalability, Code Re-Use and Efficiency . . . . . . . . . 77
5.3 Template Member Functions . . . . . . . . . . . . . . . . . . . . . . . . 79
5.4 Template Class Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.5 Template Default Parameters . . . . . . . . . . . . . . . . . . . . . . . . 83
5.6 Template Specialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.7 Static Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.8 Using the STL with Microcontrollers. . . . . . . . . . . . . . . . . . . 89
5.9 Variadic Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.10 Template Metaprogramming . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.11 Tuples and Generic Meta programming . . . . . . . . . . . . . . . . . 96
5.12 Variable Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
xx Contents