我已经完成了重构一堆C ++代码的任务,这些代码有很多数学,而不是对它的作用的解释。 为了做到这一点,我设置了一堆自动测试,给出随机数据比较新旧代码结果。
问题是,虽然生成任意大小的随机向量很简单,但我有很多" struct"有很多公共领域(> 20)我有点厌倦了编写自定义函数来填充它们。
可以想到使用某种脚本来解析定义并自动生成相应的生成器函数。
你认为这是个好主意吗? 有没有这样的事情已经完成了?答案 0 :(得分:1)
如果你只有Plain Old Data,那么结构只是一块内存,对编译器有一些意义。
这意味着您可以将其视为这样,并使用union:
简单地用随机字节填充它struct a {
int i;
char c;
float f;
double d;
};
union u {
char arr[sizeof(a)];
a record;
};
char generateRandomChar(); // implement some random char generation
int main() {
u foo;
for (char& c : foo.arr) {
c = generateRandomChar();
}
std::cout << "i:" << foo.record.i
<< "\nc:" << foo.record.c
<< "\nf:" << foo.record.f
<< "\nd:" << foo.record.d;
}
从技术上讲,这是Undefined Behavior。实际上,它在大多数编译器中都有明确的定义。