Casting to a parametrized type with different parameter values?

You should read my DVCon paper that explains how to deal with parameterized classes.

Basically you need to create a common base class that has the (pure) virtual method print. Then each parameterized extension of that base class can have a print method that has the correct parametrization.