class Obj {...}; class MyFoo : public Foo, virtual public Obj {...}; class MyBar : public Bar, virtual public Obj {...}; class MyBaz : public Baz, virtual public Obj {...}; #### void *ptr = (void*) static_cast(foo); #### Foo* foo = dynamic_cast((Obj*) ptr);