我想简化以下内容
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 } {}
};
对于上下文来说,这是为了实现某种属性自省系统。
你可以使用升压预处理器 http://www.boost.org/doc/libs/1_53_0/libs/preprocessor/doc/index.html.
#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)