大段的宏定义可能会降低代码的可读性,但是适当使用宏定义可以节省代码量,让代码更加简洁。比如对于定义有多种属性的能力模块而言,这样使用宏定义会让代码更加清晰和简洁:
//声明一种属性以及获取该属性值
#define ATTR_DECL(attr) \
protected: \
unsigned int _##attr = 0;
public: \
unsigned int attr() const { return _##attr; }
//重置一种属性
#define ATTR_RESET(attr) _##attr = 0;
//设置一种属性
#define ATTR_SET(attr, val) _##attr = (val);
//让一种属性的值增加
#define ATTR_ADD(attr, val) _##attr += (val);
可以在该能力模块类中以如下方式声明:
ATTR_DECL(dam); //声明攻击
ATTR_DECL(def); //声明防御
ATTR_DECL(hp); //声明生命值
重新计算属性:(先清零,然后计算)
ATTR_RESET(dam);//重置攻击属性
ATTR_RESET(def);//重置防御属性
ATTR_RESET(hp);//重置生命值属性
ATTR_ADD(dam, ×××);//计算攻击属性
ATTR_ADD(def, ×××);//计算防御属性
ATTR_ADD(hp, ×××);//计算生命值属性