Es gibt ein Pattern namens "Visitor", das leistet die Anforderung ohne Reflektion (geht also auch in C++). Es sieht im ersten Moment aufwendiger aus, dürfte aber schneller sein, insbesondere, wenn an vielen Stellen (ein ganzes Netzwerk aus Klassen und Objekten) die Entscheidung zwischen den Methoden getroffen werden muss.
C c = new C (); C c2 = new C (); CX cx = new CX (); CX cx2 = new CX (); Visitor v = new FVisitor () oder new GVisitor () c.call (v); c2.call (v); cx.call (v); cx2.call (v);