【问题标题】:CORBA IDL to C++ - char vs. unsigned char?CORBA IDL 到 C++ - 字符与无符号字符?
【发布时间】:2014-02-13 18:14:36
【问题描述】:

我们将 OmniORB 与我们的 C++ 服务器一起使用。目前,当一个对象在 IDL 文件中被指定为 char 时,它在 C++ 中被转换为 unsigned char。我们希望它只是char。我们可以改变什么来实现这一点吗?

【问题讨论】:

  • 是的,将编译器配置为默认将 char 视为无符号(即-funsigned-char)。
  • “我可以将 CORBA IDL 更改为 C++ 映射吗”—— 90 年代后期成千上万的 C++ 程序员所说的一句话。
  • 我不知道 OmniORB 的详细信息,但 TAO(请参阅 download.dre.vanderbilt.edu)确实使用 C++ 字符类型作为 IDL 字符。关于更改 IDL 映射,看看新的 IDL 到 C++11 语言的映射,它实现了人们谈论已久的映射(见omg.org/spec/CPP11),我们将其作为 TAOX11 的一部分实现(见@ 987654323@).

标签: c++ corba omniorb


【解决方案1】:

IDL 类型 booleancharoctet 映射到的内容由实现定义 (page 15 in the spec)。

omniORB chooses to:

...
typedef unsigned char _CORBA_Char;
typedef unsigned char _CORBA_Octet; 
...

您可以更改 omniORB 来源,但我怀疑这不是个好主意。或者您可以接受 CORBA::Char 不代表 C++ char 类型。

【讨论】:

    【解决方案2】:

    在调用直接 CORBA 调用的函数并分配此类函数的返回值时,我建议使用 CORBA::Char

    如果您需要将它们转换为“char”或“unsigned char”,static_cast 应该可以完成这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多