Thanks for the help. I was able to create something super nifty.
///
/// USE DEFINE TO DYNAMICALLY CREATE CLASS NAME,
/// USE TO DO SOMETHING TRICKY, SOMETHING LIKE,
/// class MyClass : public CommonWrapAccessorClass(Entity)
///
#define CommonWrapAccessorClass(AccessorName) CommonWrapAccessor##AccessorName
///
/// USE DEFINE TO WRAP PROPERTIES AND ACCESSORS HEADER DEFINITION
///
#define CommonWrapAccessorHeaderDefine(AccessorType, AccessorName) \
class CommonWrapAccessor##AccessorName\
{\
public:\
/*Constructor*/\
CommonWrapAccessor##AccessorName();\
public:\
/*Destructor*/\
virtual ~CommonWrapAccessor##AccessorName();\
private:\
/*The variable being wrapped*/\
AccessorType m_##AccessorName;\
public:\
/*Get the variable, fails if null*/\
AccessorType Get##AccessorName() const;\
public:\
/*Set the variable, cannot be null, will be destroyed*/\
void Set##AccessorName(AccessorType _##AccessorName);\
public:\
/*Check if property is not null*/\
bool IsNotNull##AccessorName() const;\
private:\
/*Destroy the property*/\
void Dispose##AccessorName();\
};
///
/// USE DEFINE TO WRAP PROPERTIES AND ACCESSORS IMPLEMENTATION
///
#define CommonWrapAccessorImplementationDefine(AccessorType, AccessorName) \
CommonWrapAccessor##AccessorName::CommonWrapAccessor##AccessorName() :\
m_##AccessorName (0)\
{\
}\
CommonWrapAccessor##AccessorName::~CommonWrapAccessor##AccessorName()\
{\
Dispose##AccessorName();\
}\
AccessorType CommonWrapAccessor##AccessorName::Get##AccessorName() const\
{\
assert (m_##AccessorName && "Invalid ##AccessorName");\
return m_##AccessorName;\
}\
void CommonWrapAccessor##AccessorName::Set##AccessorName(AccessorType _##AccessorName)\
{\
assert (_##AccessorName && "Invalid ##AccessorName");\
Dispose##AccessorName();\
m_##AccessorName = _##AccessorName;\
}\
bool CommonWrapAccessor##AccessorName::IsNotNull##AccessorName() const\
{\
return !m_##AccessorName;\
}\
void CommonWrapAccessor##AccessorName::Dispose##AccessorName()\
{\
if (m_##AccessorName)\
{\
delete m_##AccessorName;\
m_##AccessorName = 0;\
}\
}