template class ParamObject { public: virtual void ToFile ( FILE *dest ) { fwrite ( (char*)this - sizeof(T), sizeof(T),1, dest ); } }; #define PARAM(TYPE,NAME) union { TYPE NAME; struct { TYPE NAME##alias; ParamObject NAME##object; }; };