You may have encountered situations where in pseudocode a method returns a pointer to some type (base), but then it is cast to a pointer to another type (child). In such a situation, access to fields looks especially bad, include the virtual method table, because the size of structures may differ.
But for IDA PRO there is one solution:
0. Create a union with pointers to whatever you want right in IDA PRO (in Local Types window -> Insert... from contextual menu):
union AnyPointer {
void* pVoid;
class Type0* pType0;
class Type1* pType1;