Mostra un codice più dettagliato.
Comunque in linea di principio devi restituire un classe base in cui eventualmente fare un downcasting.

Il problema comunque non riguarda il template in se: in C++ non si possono effettuare overload sul tipo di ritorno.