13.1.8 ユニオン
OMG IDLのユニオンは、C++のクラスにマッピングされます。C++クラスには、次のものが格納されています。
- コンストラクタ
- デストラクタ
- 代入演算子
- ユニオンの値のモディファイア
- ユニオンの値のアクセサ
- ユニオンの区別子のモディファイアおよびアクセサ
たとえば、次のOMG IDL定義を考えます:
// OMG IDL
union OrderItem switch (long)
{
case 1: itemStruct itemInfo;
case 2: orderStruct orderInfo;
default: ID idInfo;
};この定義は、次のようにC++にマッピングされます:
// C++
class OrderItem
{
public:
OrderItem();
OrderItem(const OrderItem &);
~OrderItem();
OrderItem &operator=(const OrderItem&);
void _d (CORBA::Long);
CORBA::Long _d () const;
void itemInfo (const itemStruct &);
const itemStruct & itemInfo () const;
itemStruct & itemInfo ();
void orderInfo (const orderStruct &);
const orderStruct & orderInfo () const;
orderStruct & orderInfo ();
void idInfo (ID);
ID idInfo () const;
. . .
};デフォルトのユニオン・コンストラクタでは、ユニオンのデフォルト区別子の値は設定されません。そのため、ユニオンの値を設定するまで、ユニオン・アクセサ・メンバー関数を呼び出すことはできません。区別子は、_dメンバー関数でマッピングされる属性です。