Playing around with C++ templates to imitate python's abstract base class collections