Jump to content

More C++ Idioms

75% developed
From Wikibooks, open books for an open world

Preface

[edit | edit source]
More C++ Idioms C++ has indeed become too "expert friendly" -- Bjarne Stroustrup, The Problem with Programming, Technology Review, Nov 2006.

Stroustrup's saying is true because experts are intimately familiar with the idioms in the language. With the increase in the idioms a programmer understands, the language becomes friendlier to them. The objective of this open-content book is to present modern C++ idioms to programmers who have moderate level of familiarity with C++, and help elevate their knowledge so that C++ feels much friendlier to them. It is designed to be an exhaustive catalog of reusable idioms that expert C++ programmers often use while programming or designing using C++. This is an effort to capture their techniques and vocabulary into a single work. This book describes the idioms in a regular format: Name-Intent-Motivation-Solution-References, which is succinct and helps speed learning. By their nature, idioms tend to have appeared in the C++ community and in published work many times. An effort has been made to refer to the original source(s) where possible; if you find a reference incomplete or incorrect, please feel free to suggest or make improvements.

The world is invited to catalog reusable pieces of C++ knowledge (similar to the book on design patterns by GoF). The goal here is to first build an exhaustive catalog of modern C++ idioms and later evolve it into an idiom language, just like a pattern language. Finally, the contents of this book can be redistributed under the terms of the GNU Free Documentation License.

Aimed toward: Anyone with an intermediate level of knowledge in C++ and supported language paradigms

More Information

[edit | edit source]

Authors | Praise | Guidelines for Authors | GNU Free Documentation License

RSS Logo

More C++ Idioms Recent Changes RSS 2.0




Table of Contents

[edit | edit source]

Note: synonyms for each idiom are listed in parentheses.

  1. Acyclic Visitor Pattern TODO
  2. Address Of 75% developed  as of 9 October 2011
  3. Algebraic Hierarchy 75% developed  as of 12 June 2008
  4. Attach by Initialization 75% developed  as of 22 October 2011
  5. Attorney-Client 75% developed  as of 9 October 2011
  6. Barton-Nackman trick 75% developed  as of 21 February 2011
  7. Base-from-Member 75% developed  as of 6 August 2007
  8. Boost mutant 75% developed  as of 9 May 2010
  9. Calling Virtuals During Initialization 75% developed  as of 6 August 2007
  10. Capability Query 100% developed  as of 21 February 2011
  11. Checked delete 75% developed  as of 15 August 2007
  12. Clear-and-minimize 75% developed  as of 10 August 2007
  13. Coercion by Member Template 100% developed  as of 14 August 2007
  14. Computational Constructor 75% developed  as of 9 October 2011
  15. Concrete Data Type 75% developed  as of 17 March 2008
  16. Construct On First Use 75% developed  as of 6 August 2007
  17. Construction Tracker 75% developed  as of 6 August 2007
  18. Copy-and-swap 75% developed  as of 10 August 2007
  19. Copy-on-write 100% developed  as of 20 May 2009
  20. Thread-safe Copy-on-write 100% developed  as of 20 May 2009
  21. Intrusive reference counting (Counted Body) 75% developed  as of 16 November 2007
  22. Covariant Return Types TODO
  23. Curiously Recurring Template Pattern (CRTP) 100% developed  as of 7 June 2024
  24. Deprecate and Delete TODO
  25. Empty Base Optimization (EBO) 75% developed  as of 9 October 2011
  26. enable-if 75% developed  as of 21 Feb 2011
  27. Erase-Remove 75% developed  as of 17 November 2007
  28. Execute-Around Pointer 75% developed  as of 6 August 2007
  29. Exploding Return Type TODO
  30. Export Guard Macro TODO
  31. Expression-template 75% developed  as of 6 August 2007
  32. Fake Vtable TODO
  33. Fast Pimpl 0% developed  as of 6 August 2007 TODO
  34. Final Class 75% developed  as of 10 May 2010
  35. Free Function Allocators75% developed  as of 18 June 2014
  36. Function Object TODO
  37. Function Poisoning TODO
  38. Generic Container Idioms 75% developed  as of 22 November 2007
  39. Hierarchy Generation TODO
  40. Implicit conversions TODO
  41. Include Guard Macro 75% developed  as of 3 November 2007
  42. Inline Guard Macro 75% developed  as of 3 November 2007
  43. Inner Class 75% developed  as of 31 August 2007
  44. Int-To-Type 75% developed  as of 21 September 2008
  45. Interface Class 75% developed  as of 6 January 2008
  46. Iterator Pair 100% developed  as of 28 October 2007
  47. Making New Friends 75% developed  as of 5 January 2008
  48. Metafunction 75% developed  as of 15 September 2008
  49. Move Constructor 100% developed  as of 13 August 2007
  50. Multi-statement Macro 75% developed  as of 16 February 2008
  51. Member Detector 75% developed  as of 10 May 2010
  52. Named Constructor 75% developed  as of 28 September 2008
  53. Named External Argument TODO
  54. Named Loop (labeled loop) 75% developed  as of 9 May 2010
  55. Named Parameter 75% developed  as of 11 May 2010
  56. Named Template Parameters TODO
  57. Nifty Counter (Schwarz Counter) 75% developed  as of 6 August 2007
  58. Non-copyable Mixin 75% developed  as of 6 August 2007
  59. Non-member Non-friend Function 0% developed  as of 10 March 2008 TODO
  60. Non-throwing swap 75% developed  as of 9 January 2008
  61. Non-Virtual Interface (NVI, Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals) 75% developed  as of 12 June 2008
  62. nullptr 75% developed  as of 3 November 2007
  63. Object Generator 75% developed  as of 14 September 2008
  64. Object Template TODO
  65. Parameterized Base Class (Parameterized Inheritance) 75% developed  as of 6 August 2007
  66. Pimpl (Handle Body, Compilation Firewall, Cheshire Cat) 0% developed  as of 2 March 2011
  67. Policy Clone (Metafunction wrapper) 100% developed  as of 14 August 2007
  68. Policy-based Design TODO
  69. Polymorphic Exception 75% developed  as of 28 September 2008
  70. Polymorphic Value Types 75% developed  as of 21 June 2024
  71. Recursive Type Composition TODO
  72. Requiring or Prohibiting Heap-based Objects
  73. Resource Acquisition Is Initialization (RAII, Execute-Around Object, Scoped Locking) 100% developed  as of 6 November 2007
  74. Resource Return 75% developed  as of 3 November 2007
  75. Return Type Resolver 75% developed  as of 10 May 2010
  76. Runtime Static Initialization Order Idioms 75% developed  as of 6 August 2007
  77. Safe bool 75% developed  as of 6 August 2007
  78. Scope Guard 100% developed  as of 14 August 2007
  79. Substitution Failure Is Not An Error (SFINAE) 75% developed  as of 12 May 2012
  80. Shortening Long Template Names TODO
  81. Shrink-to-fit 75% developed  as of 10 August 2007
  82. Small Object Optimization TODO
  83. Smart Pointer 75% developed  as of 17 November 2007
  84. Storage Class Tracker TODO
  85. Tag Dispatching 50% developed  as of 20 June 2024
  86. Temporary Base Class 75% developed  as of 6 August 2007
  87. Temporary Proxy 75% developed  as of 6 August 2007
  88. The result_of technique TODO
  89. Thin Template 75% developed  as of 6 August 2007
  90. Thread-Safe Interface TODO
  91. Traits 75% developed  as of 20 June 2024
  92. Type Erasure 75% developed  as of 4 February 2015
  93. Type Generator (Templated Typedef) 75% developed  as of 14 September 2008
  94. Type Safe Enum 75% developed  as of 11 May 2010
  95. Type Selection 75% developed  as of 9 May 2010
  96. Virtual Constructor 75% developed  as of 17 March 2008
  97. Virtual Friend Function 75% developed  as of 10 May 2010

Advanced idioms

[edit | edit source]

These are some more advanced C++ idioms.

  1. Envelope Letter 75% developed  as of 1 February 2008 TODO


Deprecated idioms

[edit | edit source]
  1. Const auto_ptr 75% developed  as of 15 August 2007


Wikibook Development Stages
Sparse text 0% Developing text 25% Maturing text 50% Developed text 75% Comprehensive text 100%