CORBA IDL 到 C++ - 字符与无符号字符?
Posted
技术标签:
【中文标题】CORBA IDL 到 C++ - 字符与无符号字符?【英文标题】:CORBA IDL to C++ - char vs. unsigned char? 【发布时间】: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@).
【参考方案1】:
IDL 类型 boolean
、char
和 octet
映射到的内容由实现定义 (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
应该可以完成这项工作。
【讨论】:
以上是关于CORBA IDL 到 C++ - 字符与无符号字符?的主要内容,如果未能解决你的问题,请参考以下文章