int main()
{
//如何更好的使用结构体
//例如RPG游戏中通常角色定义如下:
struct Character
{
//基本数据
INT mCharID;
INT mLevel;
CHAR mName[ 32 ];
INT mExp;
INT mJob;
//货币
INT mCopper;
INT mIngot;
//属性点
INT mSP;
INT mPower;
INT mHonour;
//等等其他属性
//......
//序列化
void Serialize()
{
//stream << ...
}
//其他方法
void AddProperty()
{
}
};
//使用的时候虽然简单其实很不方便很容易出错,会出现很多无关变量出现污染问题
Character Player;
Player.mExp = 100;
//使用嵌套结构则不会出现
struct Character2
{
//基本数据
struct BaseData
{
INT mCharID;
INT mLevel;
CHAR mName[ 32 ];
INT mExp;
INT mJob;
void Serialize()
{
//stream << ...
}
} mBaseData;
//货币
struct Currency
{
INT mCopper;
INT mIngot;
void Serialize()
{
//stream << ...
}
} mCurrency;
//属性值
struct Property
{
INT mSP;
INT mPower;
INT mHonour;
void Serialize()
{
//stream << ...
}
void AddProperty()
{
//...
}
} mProperty;
void Serialize()
{
mBaseData.Serialize();
mCurrency.Serialize();
mProperty.Serialize();
}
};
//好处就是,在同一类型里面定义任意成员属性不会影响到其他地方,避免污染问题
Character2 Player2;
Player2.mBaseData.mExp = 100;
Player2.mProperty.AddProperty();
//还要一个天生的好处就是,可以在外部单独定义内部一组类型方便扩展
//既有命名空间的好处也有数据类型的好处
Character2::Currency MyCurrency = { 10000, 10000 };
Player2.mCurrency = MyCurrency;
return 0;
}
Player:
这还只是10个成员的情况下,现在的游戏角色动则几十上百的成员,更不敢想象污染超级严重
Player2:
更加的合理化,至少能减少出错的情况也更容易管理避免污染的情况出现。