On second thought, not sure this class is a good idea. Seems you trade virtual inheritance for a lot of if/else here...