Recreating Run-Time Polymorphism with Macros
bitbucket.org