>>1
That's retarded. You still fully use static types, as arguments to your dynamic_casts; type information is being in erased state only between a function invocation (where you upcast all parameters to Objects) and the moment when you downcast them back. That doesn't gain you almost anything.
The correct way to do dynamic typing in C++ is to make your own Object class loosely based on std::map, with obj["attribute"] as attribute access. Then add a shitton of operators and implicit conversions to allow expressions like "obj + 1".