【发布时间】:2012-06-25 00:05:25
【问题描述】:
在我的 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
我应该如何定义 Map 对象?我需要什么样的深奥才能拥有此功能?普通模板?提升东西?一些抵消技巧? QVariant 不知何故?
注意:很遗憾,Qt 的属性系统不是一个选项。
编辑:关于我的请求的奇怪性质:我从某处接收数据帧,例如设备。数据的前 4 个字节指定帧的类型。所以每当我收到这些数据时,我必须把它放入 Device 结构的相应成员变量中。由于有数百种不同的数据类型,而且我需要在不止一个地方使用这种匹配,我想摆脱繁重的工作——或者至少做一次——(“if/else”和“switch”声明)。
【问题讨论】:
-
为什么?可能有一种方法可以使用类型擦除来做到这一点,但这主要是需要对设计进行大修。
-
当您收到一个框架时,由您决定如何处理它。将它放入一个大的扭曲的数据结构中是一种不好的方法。不要建议它是从高处扔给你的,因为这是你的选择,这很糟糕,而且你可能不想使用如此混乱的结构来保存你的数据。拥有这种混乱的数据结构可能只是在非常特殊的情况下才有的一种方式,也就是说,如果您正在映射例如 PLC 的过程映像。
标签: c++ qt map member-variables