我无法在任何地方找到答案。问题很简单(?)。假设我有这样的功能:
class Sth {
private:
long u;
public:
void set(long u)
{
this.u = u;
}
};
我像这样运行它:
Sth s;
CORBA::Long val = 5;
s.set(val);
我可以这样做吗?一切都会好吗?
我无法在任何地方找到答案。问题很简单(?)。假设我有这样的功能:
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 位。
它应该本机转换为long
c++。该标准没有定义大小,但定义了这些值可以容纳的最小范围。这CORBA::Long
是一个 typedef long
,它可能会在平台之间改变。
您可以使用int_least32_t
(from <stdint.h>
, or <cstdint>
),它是保证至少 32 位宽的本机类型,并且 typedef'd 为适当的编译器本机类型。
这取决于您使用的 IDL 到 C++ 映射的实现。在新的 IDL 到 C++11 的映射中,IDL 中的 long 映射到 int32_t。