Non puoi evitare un cast. Specie se vuoi accedere alle variabili e non alle funzioni virtuali delle classi derivate da TNode<>.

Se ti preoccupa la "lentezza" del dynamic_cast potresti fornire a TNode<> una funzione virtuale per identificare il nodo e fare uno static_cast controllato (il DOM XML funziona così). Però se inizi ad avere molte derivate la cosa si complica e occorre ponderare se ne vale la pena.
E' il modo di operare di Java ( e Smalltalk se non ricordo male).
Derivare tutti gli oggetti da una classe comune e poi fare cast ovunque.