C++ has a consistent and fairly simple syntax for defining classes and class members. While this syntax would still look like gibberish to a non-programmer, an entry-level coder could probably understand it after flipping through C++ for Dummies. Kevin Day's predecessor must have been concerned that the former group might be maintaining the system.
Fast forward a few years, and management, not surprisingly, decided that the best folks to maintain their C++ codebase would be, in fact, C++ programmers. And that's where David came in. Faced with the common dilemma understanding a foreign architecture of a foreign product in a foreign business domain, David had at least one bit one thing going for him: a good working knowledge of C++. But since the original designers decided to #define
a meta-language in C++, and then use that meta-language to represent all of the key classes, his knowledge hardly came in handy.
#define TAG_DEFINE_INTERFACE( name )\ class name; #define TAG_BEGIN_INTERFACE(name)\ class name { protected: virtual ~name(){}; \ public: #define TAG_DERIVE_INTERFACE(name, parent)\ class name : public parent { public: #define TAG_DERIVE_INTERFACE2(name, parent, parent2)\ class name : public parent , public parent2\ { public: #define TAG_END_INTERFACE()\ }; #define TAG_DECLARE_FUNCTION(func)\ virtual func = 0; #define TAG_DECLARE_SETGET_FUNCTION(returntype, func)\ TAG_DECLARE_FUNCTION( returntype Get ## func() )\ TAG_DECLARE_FUNCTION( void Set ## func(returntype) )
It's worth pointing out that using these macros broke Visual Studio's "Go To Declaration/Definition" function, which is also useful when one is trying to get to grips with the code.