多个文件中的c ++ union

时间:2011-02-17 21:31:50

标签: c++ casting unions

对不起,这很长,但解释起来有点复杂。

我们最近不得不接受以下计划的作业(这里简化得很多):

  • 某种类型的结构(类/结构)表示物理数据块(只是一个char [1024])
  • 此块的两种逻辑分区

例如:

struct p {
  char[1024]
}
struct l1 {
  int num;
  char name[20];
}
struct l2 {
  int num;
  char type[10];
  char filler[400];
  bool flag;
}

对我来说显而易见的事情是建立工会

union {
  p phy;
  l1 logi1;
  l2 logi2;
}

但问题是规范的一部分(我为了简化它而删除的部分)是物理内容在一个单独的文件中然后是逻辑内容。

所以现在的问题是:有没有办法向联合添加字段(我假设没有)或另一种方法让'物理'文件中的函数接受'逻辑'块并将它们用作原始块?

我希望这很清楚。

P.S。这已经到期,我用reinterpret_cast解决了这个问题。我想知道是否有更优雅的方式。

2 个答案:

答案 0 :(得分:0)

不,必须一起定义类型的整个结构。您不能“重新打开”类型以便稍后将其添加到其定义中。

你在这里所说的作业要求三种类型,而不是一种代表三种类型的类型。你的前三个结构定义就足够了。

在定义了所有三个结构之后,欢迎您定义一个联合类型。可能是这样的:

#include "physical.h"
#include "logical.h"

union combined_structure {
  p phy;
  l1 logi1;
  l2 logi2;
};

答案 1 :(得分:0)

你可以做的是建立两个工会。只要你不交换它们就可以了。