Verdict: Highly recommended.
More experienced software developers and architects than I have already heaped their praises on this book. I’ll review this book from the point of not being an expert in this topic.
The author is very well read and provides plenty of references to other C++ and software development books, papers, blogs and conference talks. In its printed format, many references are in the form of a cryptic link to things like https://oreil.ly/hYYiq – however, the e-book format allows the reader to copy the link address and then open the relevant site in a web browser. It would have been even better if this book’s website had a page of all the relevant oreil.ly links.
The content of this book concerns the use of Design Patterns, the SOLID Principles, and UML. The patterns covered from Design Patterns (aka GoF) include Visitor, Strategy, Command, Adapter, Observer, Bridge, Prototype, Decorator and Singleton. Non-GoF patterns covered include CRTP, External Polymorphism, and Type Erasure. The example source code in this book does use some later C++ features so either knowledge of C++17 or C++20 (in particular Concepts) would be helpful. The author recommended C++ Templates: The Complete Guide, C++ Move Semantics, and C++17 – The Complete Guide amongst other books. Like the authors of The Pragmatic Programmer, the author highlights key aspects of his book with (39) Guidelines.
The author demonstrates different ways of implementing featured design patterns, typically illustrating the use of compile-time polymorphism (templates) and runtime polymorphism (classes). The relevant source code can be obtained from his GitHub page. He discusses the trade-offs of the different approaches and even provides some benchmarks of runtime performance. It is harder to measure the amount of heap fragmentation incurred by using runtime polymorphism but it is mentioned in the text.
I found that to get the most out of this book, I had to consult other sources – Design Patterns, Clean Architecture, UML Distilled and C++ books in general. Overall, this is a very good book and I learned a lot from it. I expect to learn more from it by re-reading it in the future.