Speaking C++ as a Native
C++ supports several styles (multiple paradigms, if you must). This allows great
flexibility, notational convenience, maintainability, and close-to-optimal
performance. Programmers who don't know the basic naitve C++ styles and
techniques "speak" C++ with a thick accent, limiting themselves to
relatively restrictive pidgin dialects.
Here, I'll present language features such as classes, class hierarchies, abstract
classes, and templates together with the fundamental programming styles they
support. In particular, I'll show how to provide generic algorithms, function
objects, access objects, and delayed evaluation as needed to build and use
flexible and efficient libraries. My aim is to give an idea of what's possible
to provide, and some understanding of the fundamental techniques of modern C++
libraries.