Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
付録A IDL定義 | > A.1 IDLの書式 |
スコープとは、IDL内での名前の一意性を定義するものです。
スコープを指定する方法には、以下の3つの方法があります。
先頭が識別子で始まり、各識別子を2つのコロン(::)で接続させたスコープ名をフルスコープと呼びます。フルスコープは、IDLファイルの最上位モジュールからの識別子の並びを指定します。以下の例では、モジュールM3内の定数xの型は、スコープ名"M1::M2::T"で定義した型(short型)となります。
インタフェースを継承している場合は、そのインタフェースのスコープ名を指定することにより、そのインタフェースが継承しているベースインタフェースの定義を利用することが可能です。以下の例では、インタフェースI3内の定数xの型は、インタフェースI2のベースインタフェースI1にある定義T、すなわちshort型となります。
module M1 { interface I1 { typedef short T ; }; interface I2:I1 { }; interface I3 { const M1::I2::T x = 100 ; }; };
2つのコロン(::)の後ろには、このスコープ名を指定した定義を含むモジュールから下の階層の識別子の並びを指定します。以下の例では、スコープ名"::T"は、このスコープ名を定義した定数を含むモジュールM1内のTが有効となりますので、インタフェースI2内の定数xの型はlong型となります。
module M1 { typedef long T ; interface I1 { typedef short T ; }; interface I2 { const ::T x = 100 ; }; };
スコープの中では、識別子のみで他の定義を使うことができます。
module M { typedef long L ; const L x = 100 ; };
名前が同一スコープ内に存在しない場合は、自らを含む上位スコープを順に探索するので、上位のスコープの名前は以下のようにスコープ名を指定しないで名前だけで参照できます。以下の例では、モジュールM2内で使用しているLは、モジュールM2のスコープ内に存在しませんが、その上位スコープのモジュールM1にLの定義があるので、この定義(long型)が有効になります。
module M1 { typedef long L ; module M2 { const L x = 100 ; }; };
あるスコープで、スコープを指定されていない名前が一度使われると、そのスコープでその名前を再定義することはできません。このような再定義はコンパイルエラーを引き起こします。
以下の定義を行うと、スコープのネスト化が行われます。
また、以下の定義を行うと、新たなスコープが形成されます。
スコープの形成例を以下に示します。この例では3つのスコープが形成されます。
スコープ内では各定義の識別名が重複してはいけません。なお、ネストしたスコープの中では同じ名前の識別子を定義することができます。各定義の識別子は大文字と小文字との区別をしていないので、大文字か小文字かが違うだけの識別子は、同一とみなされます。
目次
索引
![]() ![]() |