我知道最好避免使用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; \
}
然后在一个类中,我可以为很多变量执行此操作,这使得代码更加干净。
GETTER_AND_SETTER(Variable1)
GETTER_AND_SETTER(Variable2)
GETTER_AND_SETTER(Variable3)
...
我检查了here和here,但我没有得到答案。伙计们,对此有任何想法吗? 谢谢。
编辑: getter / setter的例子只是用来表示这个想法。请不要专注于他们。 :)
答案 0 :(得分:10)
你不能。
在编译时你可以用变量名执行任何魔法; C ++根本没有任何反射功能。您只能使用预处理器生成代码来实现魔术。
典型的解决方法涉及值std::map
的“名称”,但除非你有大量的东西,否则你现有的方法对我来说似乎很合理。
虽然,根据您的要求,您最好忘记这个“getter”/“setter”废话,并为您的班级定义一些逻辑,语义成员函数。如果你真的只是为每个成员变量创建一个直接访问器和mutator,那么,真的,what's the point?