13.1.8.4 メンバー関数

アクセサとモディファイアのほかに、型TYPEのOMG IDLユニオンに対してswitch (long)区別子で次のメンバー関数が生成されます:

TYPE ();
これは、ユニオンのデフォルト・コンストラクタです。この関数ではデフォルトの区別子が設定されないため、ユニオンの値を設定するまではユニオンにアクセスできません。
TYPE( const TYPE&From);
このコピー・コンストラクタは、指定のユニオンをディープ・コピーします。ユニオン・パラメータの任意の値をコピーします。From引数には、コピー元のユニオンを指定します。
~TYPE();
このデストラクタは、ユニオンに関連付けられたデータを解放します。
TYPE &operator=(const TYPE &From);
この代入演算子は指定のユニオンをコピーします。現在のユニオンにある既存の値は解放されます。From引数には、コピー元のユニオンを指定します。
void _d (CORBA::Long Discrim);
このモディファイアは、ユニオン区別値の値を設定します。Discrim引数には、新しい区別値を指定します。引数のデータ型は、ユニオンのswitch文で指定したOMG IDLのデータ型で決まります。OMG IDLの各データ型については、次の表のC++データ型を参照してください。
この関数は、同じユニオン・メンバー内の値に区別値を設定する場合にのみ使用します。この関数を使用して、ユニオン・メンバーを暗黙的に切り替えることはできません。
これらの制限については、次のコードを参照してください:
union U switch(long) {
case 1:
case 2:
short s;
case 3:
int it;
};

short st;
U u;
u.s(1296); // member "s" selected
st = u.s(); // st == 1296
u._d(2); // OK: member "s" still selected
st = u.s(); // st == 1296
u._d(3); // BAD_PARAM: selecting a different member
ユニオンの新しいインスタンスで_d()モディファイアが呼び出されると、Tuxedo C++の「暗黙的な切替え」の制約が緩和されます。この場合、例外はスローされず、ユニオンへの影響はありません。
U u2;
u2._d(1);     // no exception, union is unchanged
st = u2.s(); // error! accessing an uninitialized union
u2.it(1296); // OK: member "it" now selected
CORBA::Long _d () const;
この関数は現在の区別値を返します。戻り値のデータ型は、ユニオンのswitch文で指定したOMG IDLのデータ型で決まります。OMG IDLの各データ型については、次の表のC++データ型を参照してください。