使用多行stringify宏生成getter / setter

时间:2014-01-28 17:13:42

标签: c++ macros getter-setter

我最近看过一个很酷的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
  • 现在考虑其中一个用于所有string / int / double等变量

我知道所有避免 - 宏使用类型的备注,但我实际上发现它非常酷,因为长的getter / setter行真的令我感到不安。你能想到这种方法可能出现的任何问题吗?

2 个答案:

答案 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; \         
       }