Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス
IDLに指定したunionは,メソッドとともにC++クラスへとマッピングされます。IDLに指定したunionの各メンバは,アクセッサ,およびミューテータとして動作する関数にマッピングされます。ミューテータ関数は,データメンバの値を設定します。
あらかじめ定義されている識別型の_dという名前のデータメンバも生成されます。unionが初めて作成される際には,この識別型の値は設定されていません。したがって,unionを使用する前に,アプリケーションはその識別型の値を設定する必要があります。提供されているメソッドのどれかを使用してデータメンバを設定すると,それらすべてのデータメンバは自動的に識別型として設定されます。次の表は,example_unionクラスで使用できるメソッドの幾つかを示しています。
表20-3 example_unionクラス用に生成されたメソッド(C++)
メソッド | 説明 |
---|---|
_d() | ディスクリミネータの値を返します。 |
_d(CORBA::Long) | ディスクリミネータの値を設定します。ここでは,ディスクリミネータはlong型です。入力する引数の型は,ディスクリミネータのデータ型によって異なります。 |
example_union() | デフォルトコンストラクタでは,識別型にデフォルト値が設定されますが,データメンバの初期化は実行されません。 |
example_union(const example_union& obj) | コピーコンストラクタがソースオブジェクトのディープコピーを実行します。 |
~example_union() | デストラクタがunionによって所有されているメモリを解放します。 |
operator=(const example_union& obj) | 代入演算子がディープコピーを実行します。また,必要な場合は,古いメモリを解放します。 |
コードサンプル20-26〜20-27では,example_unionの生成方法を示しています。
// IDL struct example_struct { long abc; }; union example_union switch(long) { case 1: long x; // a primitive data type case 2: string y; // a simple data type case 3: example_struct z; // a complex data type };
// C++ struct example_struct { CORBA::Long abc; }; class example_union { private: CORBA::Long _disc; CORBA::Long _x; CORBA::String_var _y; example_struct _z; public: example_union(); ~example_union(); example_union(const example_union& obj); example_union& operator=(const example_union& obj); void x(const CORBA::Long val); const CORBA::Long x() const; void y(char *val); void y(const char *val); void y(const CORBA::String_var& val); const char *y() const; void z(const example_struct& val); const example_struct& z() const; example_struct& z(); CORBA::Long _d(); void _d(CORBA::Long); ... };
コードサンプル20-27に示したexample_unionクラスに加えて,example_union_varクラスも生成されます。_varの詳細については,「21.6 <class_name>_var」を参照してください。
union内の複合データ型のメモリ管理をするときは,次の点を注意してください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.