我有一个像这样的结构:
struct Player {
POINT3D headPosition;
POINT3D position;
POINT2D view;
INT32 health;
// etc...
};
我想迭代这个结构的成员来做一些动作,就像我们可以用其他语言中的 foreach 做的那样。
我有什么方法可以在C ++中做类似的事情吗?我的研究表明,本身不可能,我发现像Boost.Hana这样的库可以实现,但我想首先确定没有第三方库绝对没有其他办法。即使是宏或在编译时生成的东西也可以。因为我们确切地知道它必须以某种方式自动化结构。您可以在" foreach"中忽略与我的问题的不同数据类型相关的问题。循环我将成员变量赋予模板函数,该函数接受在该结构中找到的所有类型的变量。
感谢您对此事的帮助。
答案 0 :(得分:1)
是的,这是可能的,使用疯狂的俄罗斯黑客: - )
相关图书馆是Antony Polukhin "magic get"。具体来说,它提供了“for each field”mechanism,它采用带有自动参数类型的模板化lambda。例如:
struct simple {
int a;
char b;
short d;
};
simple x {42, 'a', 3};
std::stringstream ss;
boost::pfr::for_each_field(
x,
[&ss](auto&& val) {
ss << val << ' ';
}
);
警告:这需要C ++ 14甚至C ++ 17才能工作!