gpt4 book ai didi

c++ - 如何使用宏来收集变量名?

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:19 24 4
gpt4 key购买 nike

我想简化以下内容

class A {
int a;
int b;
int c;
std::vector<int*> addrs;
public:
A() : addrs{ &a, &b, &c } {}
};

这样我就不用在两个地方编写字段列表,即 addrs 的声明和初始化程序。有什么方法可以使用宏来收集声明并在以后使用它们。例如,

class A {
VAR_DECL(a);
VAR_DECL(b);
VAR_DECL(c);
std::vector<int*> addrs;
public:
A() : addrs{ VAR_ADDRESSES } {}
};

对于上下文,这是为了实现某种属性内省(introspection)系统。

最佳答案

你可以使用 Boost Preprocessor 来做到这一点.

#define VARIABLES (a)(b)(c)

#define DECLARE_MEMBER(maR, maType, maId) \
maType maId;

#define TAKE_ADDRESS(maR, maUnused, maIndex, maId) \
BOOST_PP_COMMA_IF(maIndex) & maId

class A {
BOOST_PP_SEQ_FOR_EACH(DECLARE_MEMBER, int, VARIABLES)
std::vector<int*> addrs;
public:
A() : addrs { BOOST_PP_SEQ_FOR_EACH_I(TAKE_ADDRESS, %%, VARIABLES) } {}
};

// Now you can clean up:
#undef DECLARE_MEMBER
#undef TAKE_ADDRESS
// In case you no longer need the list, also:
#undef VARIABLES

关于c++ - 如何使用宏来收集变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18483572/

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