
Why is it considered better to model a concept rather than inherit from a base class and override a virtual function? It seems to me that it is simpler to explain to a newcomer to inherit from a class, and it is more apparent from looking at the code what is actually happening.
If I already have a function (object) that provides the desired output, why must I create a class, implement a member function that forwards to that function(object), and then use the class? A simple call to make_filter(f) will do the job without the need to write any code.
Innheritance is a strongest relationship and shouldn't be used unless really needed. That what we learn from the expirience with modern C++ and from C++ experts (see recent Sutter books for example). Among other things your implementation employ runtime polimorpism for no particular reason IMO. Gennadiy