我们发布了 IDL 文件来表示接口(interface),并且将具有与 C++/C 代码类似的结构,以便我们可以在调用接口(interface)时使用它们进行映射。因此需要一些转换(等效)表示。
就像 IDL 中的 sequence
在 C++ 等中用 list
表示。
最近,我遇到了一个复杂(唯一)、有效的 IDL 文件,例如 -
union HostAddress switch(EAddType)
{
case E_IPV_4:
char ipv4Addr[4];
case E_IPV_6:
char ipv6Addr[16];
};
- 这个结构对我们有什么帮助?有这样一个 union 有什么意义?
- 我们如何在 C/C++ 中表示上述 IDL 结构?
最佳答案
union 结构为您提供了一个不透明的数据 block ,该数据 block 大到足以包含最大的成员。在这种情况下,您将有一个带有类型字段的对象,然后是 16 个字节来包含 ipv6 地址,它还将存储 ipv4 地址,这使您可以编写简单的代码来处理 ipv4 和 v6 地址,而无需花费完整的对象。 union 通常用于像这样的小对象,您将浪费空间来拥有一个可以处理所有情况的统一对象。见wikipedia article on Unions和 wikibook page on Unions
希望对您有所帮助。
关于c++ - 如何在 C++ 中用 union 和 switch 表示 IDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016934/