learning about api design in C++ from this website http://www.apibook.com/blog/