Basically, it boils down to this.
Why are you using macros inside C++ to reinvent C++?

I mean, dumb macro tricks are sometimes necessary to get some sense of 'OO' into C programs, but C++???? - that's just too horrid to think about.