用现代c ++技术替换c ++宏的连接

hou*_*stc 7 c++ c++11

我知道最好避免使用c ++中的宏.使用内联函数替换类似函数的宏,并使用constexpr/using来替换const-variable-define宏.但我想知道是否有一种方法可以通过一些现代的c ++技术取代宏连接功能.

例如,如何替换以下宏:

#define GETTER_AND_SETTER(name)     \
   inline void Set##name(int value) \
   {                                \
      m_##name = value;             \
   }
   inline int Get##name() const     \
   {                                \
      return m_##name;              \
   }
Run Code Online (Sandbox Code Playgroud)

然后在一个类中,我可以为很多变量做这个,这使得代码更加干净.

GETTER_AND_SETTER(Variable1)
GETTER_AND_SETTER(Variable2)
GETTER_AND_SETTER(Variable3)
...
Run Code Online (Sandbox Code Playgroud)

我在这里这里检查,但我没有得到答案.伙计们,对此有任何想法吗?谢谢.

编辑:getter/setter的例子只是用来表示想法.请不要专注于他们.:)

Lig*_*ica 12

你不能.

在编译时你可以用变量名执行任何魔法; C++根本没有任何反射功能.您只能使用预处理器生成代码才能发挥作用.

典型的解决方法涉及std::map到值的"名称",但是除非你有大量的东西,否则你现有的方法对我来说似乎很合理.

虽然,根据您的要求,您可能最好忘记这个"getter"/"setter"无意义,并为您的类定义一些逻辑,语义成员函数.如果你真的只是为每个成员变量创建一个直接访问器和mutator,那么,真的,重点是什么