Когда вы используете шаблонную функцию где-то в программе, вы явно подставляете тип данных. Этот тип данных будет подставлен в шалон во время компиляции. Т.е. динамически в программе С++ тип данных нельзя определить. Если хотите создать динамический тип, то можно использовать абстрактный класс и явное преобразование типов при конвертации к дочернему классу.