1

どこにも答えが見つかりません。質問は(?)簡単です。私がそのような機能を持っていると仮定しましょう:

class Sth {

private:
   long u;
public:
   void set(long u)
   {
    this.u = u;
   }

};

そして私はそれをこのように実行します:

Sth s;
CORBA::Long val = 5;
s.set(val);

これはできますか?すべて大丈夫ですか?

4

3 に答える 3

2

これで問題ないはずです。IBM リファレンス によると、IDL long は-2^31 から 2^31-1の範囲で、サイズは少なくとも 32 ビットです。

ネイティブにlongC++ に変換する必要があります。標準ではサイズは定義されていませんが、これらの値が保持できる最小範囲が定義されています。はのCORBA::Longtypedef でありlong、プラットフォーム間で変更される可能性があります。

于 2012-09-14T13:52:36.600 に答える
1

int_least32_t(from <stdint.h>、または)を使用できます<cstdint>。これは、少なくとも 32 ビット幅であり、適切なコンパイラのネイティブ型に typedef されていることが保証されているネイティブ型です。

于 2012-09-14T14:08:50.163 に答える
1

これは、使用している IDL から C++ へのマッピングの実装によって異なります。新しい IDL から C++11 へのマッピングでは、IDL の long が int32_t にマップされます。

于 2012-09-15T06:40:23.027 に答える