C++ reflection implementation using preprocessor code generator