Functional programming in C++
designing reusable classes .