13.1.20 モジュール

OMG IDLのモジュールは、C++のクラスにマッピングされます。モジュールに格納されるオブジェクトは、このC++クラスの中で定義します。インタフェースと型もクラスにマッピングされるため、ネストされたC++クラスが生成されます。

たとえば、次のOMG IDL定義を考えます:

// OMG IDL
module INVENT
  {
interface Order
      {
      . . .
      };
};

この定義は、次のようにC++にマッピングされます:

/ C++
class INVENT
   {
   . . .
   class Order : public virtual CORBA::Object
        {
        . . .
        }; // class Order
   };   // class INVENT

ネストされたモジュールが複数ある場合は、複数のネストされたクラスが生成されます。モジュール内のオブジェクトはモジュール・クラスになります。インタフェース内のオブジェクトはインタフェース・クラスになります。

OMG IDLでは、モジュール、インタフェース、および型の名前を同じにすることができます。ただし、C++言語用のファイルを生成する場合、名前を同じにすることはできません。この制限が必要になるのは、OMG IDLの名前が同じ名前でネストされたC++クラスに生成される際に、これをC++コンパイラでサポートしていないためです。

ノート:

現在のモジュール名と同じ名前のインタフェースまたは型でOMG IDLからC++コードを生成すると、Oracle Tuxedo OMG IDLコンパイラでは、その情報を伝えるメッセージが出力されます。このメッセージを無視して、インタフェースまたは型とモジュール名とを区別するために一意の名前を付けなかった場合、コンパイラによってファイルの生成時にエラーが発生したことが通知されます。