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コンパイラでは、その情報を伝えるメッセージが出力されます。このメッセージを無視して、インタフェースまたは型とモジュール名とを区別するために一意の名前を付けなかった場合、コンパイラによってファイルの生成時にエラーが発生したことが通知されます。親トピック: マッピング