Changed to using friend operators so that I can get around the explicit conversion operator conundrum
Employed preprocessor macros to reduce code obscurity