Le problème ne vient pas des opérations de transtypage, mais du fait que d'après ton design, un Node n'est pas un ObjBase.
Si tous les ObjBase peuvent être considérés comme des Node, alors la correction que tu as faite est justifiée.
Si tu souhaites faire dans le porco, tu peux ajouter une fonction membre à l'interface ObjBase du style :
virtual Node * getAsNode() const
dans laquelle un Node est reconstruit à partir d'un ObjBase ou sauvagement transtypé.
Si elle est applicable, je milite pour la première solution.
Partager