C++ pattern of creating function objects to give you a simple object oriented way to vary your implementation.