gpt4 book ai didi

c++ - 用现代 C++ 技术替换 C++ 宏的串联

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:49 25 4
gpt4 key购买 nike

我知道最好避免在 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)
...

我检查了herehere ,但我没有得到答案。那么对此有什么想法吗?

编辑:getters/setters 的例子只是用来展示这个想法。请不要关注它们。

最佳答案

你不能。

在编译时使用变量名并没有什么神奇之处; C++ 根本没有任何反射功能。您只能使用预处理器来生成代码来实现魔法。

典型的变通方法涉及“名称”到值的 std::map,但您现有的方法对我来说似乎很合理,除非您有大量的东西。

尽管如此,根据您的要求,您最好还是忘记这种“getter”/“setter”废话,而只为您的类定义一些逻辑的、语义的成员函数。如果你真的只是为每个成员变量创建一个直接访问器和修改器,那么,实际上,what's the point

关于c++ - 用现代 C++ 技术替换 C++ 宏的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com