c++ - 如何在 C++ 中用 union 和 switch 表示 IDL

标签 c++ middleware corba idl remoteobject

我们发布了 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 Unionswikibook page on Unions

希望对您有所帮助。

关于c++ - 如何在 C++ 中用 union 和 switch 表示 IDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12016934/

相关文章:

java - 线程池的设计模式

c++ - 让 gcc 将一系列 BYTE 比较转换为 WORD/DWORD/QWORD

php - 这应该是中间件吗?

java - JacORB 连接问题?

java - 尝试获取根命名上下文时出现 org.omg.CORBA.OBJECT_NOT_EXIST "NameService"

c++ - 编译时排除部分函数模板

java - 从 Java 导入到 C++ 包括

c# - 为什么 ASP.NET Core 在中间件管道的末尾返回 404?

c# - 我可以按任何顺序将中间件应用于应用程序吗?

java - 在实现中获取 ORB 的访问权限?