我最近看过一个很酷的c风格宏播放,它会自动生成课程的setter / getters。所以这就是我所说的。
#define BOOL_VARIABLE(name)\
void set##name(bool iValue)\
{\
// set the boolean
}\
const bool get##name() const\
{\
// get the boolean
}
BOOL_VARIABLE(AVariableName); // and calling them inside the class
我知道所有避免 - 宏使用类型的备注,但我实际上发现它非常酷,因为长的getter / setter行真的令我感到不安。你能想到这种方法可能出现的任何问题吗?
答案 0 :(得分:4)
直接成员访问没有很大的好处 - 为什么它应该首先存在?
通常,访问者的主体是验证输入和this,
状态的好地方,但宏不允许这样做,所以它实际上没有“足够”在代码库中使用(IMO) 。在典型的程序中,通常还有足够的变化来证明其使用不合理。它当然不应该是声明变量和/或其访问器的唯一方法。
就这样没有混淆:我全都是访问者和封装。这个宏只会让你失去更重要的好处。
答案 1 :(得分:4)
以下*是更好的选项(类型也作为参数)。但是,如@justin所述,我会避免实现充分利用访问器方法。如果您忘记实现它们,您的编译器将生成错误。
* http://cppkid.wordpress.com/2008/09/04/getters-and-setters-for-a-class-using-a-macro/
#define GETSET(type, var) \
private: \
type _##var; \
public: \
type Get##var() \
{\
return _##var; \
}\
void Set##var(type val) \
{\
_##var = val; \
}