我在任何地方都找不到答案。问题很(?)简单。假设我有这样的功能:
class Sth {
private:
long u;
public:
void set(long u)
{
this.u = u;
}
};
我这样运行它:
Sth s;
CORBA::Long val = 5;
s.set(val);
我可以这样做吗?一切都会好吗?
这个应该没问题。 根据 IBM 参考资料,IDL long 的范围为 -2^31 到 2^31-1,大小至少为 32 位。
它应该在 C++ 中本地转换为
long
。该标准没有定义大小,但定义了这些值可以容纳的最小范围。 CORBA::Long
是 long
的类型定义,在不同平台之间可能会发生变化。
您可以使用
int_least32_t
(来自 <stdint.h>
或 <cstdint>
),它是保证至少 32 位宽的本机类型,并且 typedef 为适当的编译器本机类型。
这取决于您正在使用的 IDL 到 C++ 映射的实现。在新的 IDL 到 C++11 中,IDL 中的 long 映射到 int32_t。