Maybe this thread is of interest: Union splitting vs C++
There many insights into dealing with dynamic dispatch are given.