Multi-Paradigm Design for C++ by James O. Coplien