在我的C++/QT应用我有一个结构与数以百计的变量,如下面的组织:映射迭代
struct MyStruct
{
int a1;
double a2;
struct InnerStruct
{
int b1;
bool b2;
struct InnerInnerStruct
{
char c1;
.
.
.
};
InnerInnerStruct b3;
.
.
.
};
InnerStruct a3;
.
.
.
};
我想有地图的每个结构成员的地址变量,它具有整数作为键类型,所以我就可以通过它的密钥来访问它:
MyStruct ms;
theMap[0] = &(ms.a1);
theMap[1] = &(ms.a2);
theMap[2] = &(ms.a3.b1);
theMap[3] = &(ms.a3.b2);
theMap[4] = &(ms.a3.b3.c1);
theMap[3] = true; // MyStruct::InnerStruct::b2 is 'true' now
应该怎么定义theMap反对呢?我需要什么样的深奥主义才能拥有这个特征?纯模板?提升东西?一些抵消技巧? QVariant以某种方式?
注意:不幸的是Qt的财产制度不是一种选择。
编辑:关于我的请求的奇怪性质:我收到数据帧从什么地方,比如说,一个设备。前四个字节的数据指定了帧的类型。所以无论何时我收到这些数据,我都必须将它放入Device结构的相应成员变量中。由于有数百种不同的数据类型,因为我需要使用这种匹配不止一个地方,我想摆脱苦差事 - 至少要做一次 - (“if/else”和“switch”语句)。
为什么?使用类型擦除可能有一种方法可以做到这一点,但这主要是需要进行设计检修。 – tmpearce
当你收到一个画面时,要决定如何处理它,取决于你。把它放入一个数据结构的大乱码是一种不好的方法。不要认为它是从最高处投射到你身上的,因为它是你的选择,这很糟糕,你可能不想使用如此混乱的结构来保存你的数据。拥有这种混乱的数据结构可能是非常特殊的情况,也就是说,如果你映射了一个PLC的过程映像,那么这种结构可能是一种很不相同的方式。 –