Any_varクラス


 
4.4.1.16. CORBA::Any_varクラス

名前

CORBA::Any_var::Any_var - デフォルトコンストラクタ

形式

機能説明

CORBA::Any_varのインスタンスを生成するときに使用します。内部で保持しているCORBA::Anyへのポインタはヌル・ポインタに初期化されます。

戻り値

ありません。

エラー

起こりません。


名前

CORBA::Any_var::Any_var(const CORBA::Any_var&)

- コピーコンストラクタ

形式

機能説明

CORBA::Any_varのインスタンスを作成しaをコピーします。

戻り値

ありません。

エラー

コピーコンストラクタは内部でCORBA::Anyをコピーするため、メモリ不足によるエラーが起こることがあります。この場合、CORBA::Anyへのポインタはヌル・ポインタに設定されます。


名前

CORBA::Any_var::Any_var(CORBA::Any*) - 値の挿入を行うコンストラクタ

形式

機能説明

CORBA::Any_varのインスタンスを作成し、aのメモリ領域の解放はCORBA::Any_varのインスタンスが行います。したがって、引数として渡した後は、値を操作してはいけません。

戻り値

ありません。

エラー

起こりません。


名前

CORBA::Any_var::~Any_var - デストラクタ

形式

機能説明

CORBA::Any_varのインスタンスを削除するときに使用します。ユーザが明示的に呼び出すことはありません。~Any_varは、deleteオペレータを使ったときあるいはスコープから抜けるときに自動的に呼び出され、保持していたCORBA::Anyの領域も解放します。

戻り値

ありません。

エラー

起こりません。


名前

CORBA::Any_var::operator=(CORBA::Any*)
CORBA::Any_var::operator=(const CORBA::Any_var&)

- 代入オペレータ

形式

機能説明

CORBA::Any_varのインスタンスにCORBA::Anyを代入またはコピーし、自分自身への参照を返します。もし、左辺がCORBA::Anyを保持していたとき、古いCORBA::Anyは破棄されます。

CORBA::Any*型で代入した場合は、ポインタを代入し、自分自身への参照を返します。aのメモリ領域の解放はCORBA::Any_varのインスタンスが行います。したがって、aは引数に渡した後に操作してはいけません。代入されたaは、deleteオペレータを使ったときまたはスコープを抜けるときに自動的に解放されます。

CORBA::Any_var&型からの代入は右辺が保持している領域のコピーし、自分自身への参照を返します。コピーされた領域は、deleteオペレータを使ったときまたはスコープを抜けるときに自動的に解放されます。

戻り値

自分自身への参照を返します。

エラー

CORBA::Any_var&型からの代入はCORBA::Anyをコピーするため、メモリ不足によるエラーが起こることがあります。この場合、CORBA::Anyへのポインタはヌル・ポインタに設定されます。


名前

CORBA::Any_var::operator->()

- 保持しているAnyのポインタを返す矢印(->)オペレータ

形式

機能説明

CORBA::Any_varのインスタンスが保持しているCORBA::Anyのポインタを返します。この演算子を使うことにより、CORBA::Any*に対するオペレーション呼び出しと同等に扱うことができるようになります。

戻り値

保持しているCORBA::Anyのポインタを返します。

エラー

起こりません。


名前

CORBA::Any_var::operator CORBA::Any*() const
CORBA::Any_var::operator CORBA::Any*&()

- 保持しているCORBA::Anyのポインタを返すキャスト

形式

機能説明

CORBA::Any_varのインスタンスが保持しているCORBA::Anyのポインタを返します。CORBA::Any*やCORBA::Any*&へのキャストが必要なとき、CORBA::Any*もしくはCORBA::Any*&と同等に扱えます。

戻り値

保持しているCORBA::Anyのポインタを返します。

エラー

起こりません。


名前

CORBA::Any_var::operator const CORBA::Any&() const
CORBA::Any_var::operator CORBA::Any&()

- 保持しているCORBA::Anyの参照を返すキャスト

形式

機能説明

CORBA::Any_varのインスタンスが保持しているCORBA::Anyの参照を返します。const CORBA::Any&やCORBA::Any&へのキャストが必要なとき、const CORBA::Any&もしくはCORBA::Any&と同等に扱えます。

戻り値

保持しているCORBA::Anyの参照を返します。

エラー

起こりません。


名前

CORBA::Any_var::operator>>=(<basic type A>&) const
CORBA::Any_var::operator>>=(const char*&) const
CORBA::Any_var::operator>>=(char*&) const
CORBA::Any_var::operator>>=(const CORBA::Any*&) const
CORBA::Any_var::operator>>=(CORBA::Any&) const

CORBA::Any_var::operator>>=(CORBA::Any::to_<basic type B>) const

CORBA::Any_var::operator>>=(const CORBA::Any&, <user type>*&) const

- 値の取り出し

形式

機能説明

CORBA::Any_varが保持している値をxに取り出します。このとき、CORBA::Any_varが保持しているタイプコードとxの型が一致しているか調べます。値の取り出しが成功したときは1を返し、失敗したときは0を返します。

>>=オペレータは各型ごとに用意されます。

<basic type A>にはCORBA::Short, CORBA::UShort, CORBA::Long, CORBA::ULong, CORBA::LongLong, CORBA::ULongLong, CORBA::Float, CORBA::Double, CORBA::LongDouble が入ります。
xがこれらの型の場合、自分自身が保持している値を直接xに代入します。

例) CORBA::Any_varからCORBA::Long型の値を取り出す。

xがconst char*型のときは、自分自身が保持している値(char*)を直接xに代入します。xのメモリ管理はanyにありますのでxを解放してはいけません。
xがchar*型のときは、自分自身が保持している値(char*)をCORBA::string_dup関数でコピーした値(char*)をxに代入します。

例) CORBA::Any_varから可変長文字列を取り出す。

xがCORBA::Any型のときは、自分自身が保持している値(CORBA::Any*)が指すCORBA::Anyをxにコピーします。
xがconst CORBA::Any*型のときは、自分自身が保持している値(CORBA::Any*)を直接xに代入します。xのメモリ管理はanyにありますのでxを解放してはいけません。

<basic type B>にはboolean, char, wchar, octet, (固定長)string, (固定長)wstring, objectが入ります。たとえばbooleanならばto_booleanとなります。to_XXX型は値の取り出しを補助するための型です。これらの型定義は「CORBA::Anyの利用を補助する型」を参照してください。
boolean, char, wchar, octetの場合は、自分自身が保持している値をキャストしてx.refに代入します。たとえば、booleanならCORBA::Booleanにキャストします。
(w)stringの場合は、まずx.boundの大きさの領域をCORBA::(w)string_allocオペレーションにより確保し、x.valに代入します。つぎに自分自身が保持している値をx.valが指している領域にコピーします。

例) CORBA::Any_varからCORBA::Boolean型とCORBA::String型の値を取り出す。

ユーザ定義の型については、<user type>型を扱うオペレータがIDLコンパイラによって自動的に生成されます。
使い方はCORBA::Shortなどの場合と変わりません。anyが保持している値がxに返されます。

例) CORBA::Any_varから構造体を取り出す。

配列の取り出しにはArray_forany(実際にはArrayの部分に配列の型名が入る)という補助型がIDLコンパイラによって生成されます。配列を取り出す例についてはC++マッピング「anyからの値の取り出し」を参照してください。

戻り値

取り出しに成功した場合は1が返ります。失敗した場合には0が返ります。

エラー

失敗した場合には0が返ります。また、メモリの確保をともなう操作の場合はxに0が返されます。

関連項目

C++マッピング「any」

注意

CORBAの仕様変更により、文字列取り出しオペレータはCORBA::Any_var::operator>>=(char*&) constからCORBA::Any_var::operator>>=(const char*&) constに、CORBA::Any取り出しオペレータはCORBA::Any_var::operator>>=(CORBA::Any&) constからCORBA::Any_var::operator>>=(const CORBA::Any*&) constにそれぞれ変わりました。今バージョンでは、過去のソースコードとの互換のために旧オペレータをサポートしますが今後のバージョンでのサポートは保証しません。新規に作成するプログラムでは、これらの旧オペレータを使用しないでください。

CORBA::String_var型を引数にして可変長文字列を取り出す場合、R4.5以前のバージョンでは、CORBA::Any_var::operator>>=(char*&) constが呼び出されますが、R5.1では、CORBA::Any_var::operator>>=(char*&) constとCORBA::Any_var::operator>>=(const char*&) constのどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。R4.5以前と同様の動作をさせたいときは、引数のCORBA::String_varをchar*&で明示的にキャストする必要があります。

CORBA::Any_var型を引数にしてCORBA::Anyを取り出す場合、R4.5以前のバージョンでは、CORBA::Any_var::operator>>=(CORBA::Any&) constが呼び出されますが、R5.1では、CORBA::Any_var::operator>>=(CORBA::Any&) constとCORBA::Any_var::operator>>=(const CORBA::Any*&) constのどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。R4.5以前と同様の動作をさせたいときは、引数のCORBA::Any_varをCORBA::Any&で明示的にキャストする必要があります。


名前

CORBA::Any_var::operator<<=(<basic type A>)
CORBA::Any_var::operator<<=(const char*)
CORBA::Any_var::operator<<=(char*)
CORBA::Any_var::operator<<=(const CORBA::Any&)
CORBA::Any_var::operator<<=(CORBA::Any*)
CORBA::Any_var::operator<<=(const CORBA::Any_var&)

CORBA::Any_var::operator<<=(CORBA::Any::from_<basic type B>)

CORBA::Any_var::operator<<=(CORBA::Any&, const <user type>&)
CORBA::Any_var::operator<<=(CORBA::Any&, <user type>*)

- 値を挿入する

形式

機能説明

CORBA::Any_varに値xを挿入します。このとき、CORBA::Any_varが保持するタイプコードはxの型と一致するように自動的に設定されます。

<<=オペレータは各型ごとに用意されます。

<basic type A>にはCORBA::Short, CORBA::UShort, CORBA::Long, CORBA::ULong, CORBA::LongLong, CORBA::ULongLong, CORBA::Float, CORBA::Double, CORBA::LongDouble が入ります。
xがこれらの型の場合、xの値が直接any内部に保持されます。

例) CORBA::Any_varにCORBA::Long型の値を挿入する。

xがconst char*型の場合は、xをCORBA::string_dup関数でコピーした値(char*)をany内部に保持します。
xがchar*型の場合は、xの値(char*)が直接any内部に保持されます。xのメモリ管理がanyへ移りますのでxを解放してはいけません。

例) CORBA::Any_varに可変長文字列を挿入する。

operator<<=(const CORBA::Any& x)はxのコピーを生成して自分自身に挿入します。
operator<<=(const CORBA::Any* x)はxをコピーせずに自分自身に挿入します。xのメモリ領域の解放は挿入した側で行います。
operator<<=(const CORBA::Any_var& x)はxのコピーを生成して自分自身に挿入します。

<basic type B>にはboolean, char, wchar, octet, (固定長)string, (固定長)wstringが入ります。たとえばbooleanならばfrom_booleanとなります。from_XXX型は値の挿入を補助するための型です。これらの型定義は「CORBA::Anyの利用を補助する型」を参照してください。
boolean, char, wchar, octetの場合は、x.valをnewして自分自身に挿入します。
(w)stringの場合は、まずxのnocopyフラグが1かどうかを調べます。nocopyが1ならば自分自身に挿入します。xのメモリ領域の解放は挿入された側で行われます。nocopyが0のときは、xが保持している文字列が入る大きさの領域をCORBA::(w)string_allocオペレーションを使って確保します。文字列の長さはx.boundが0より大きければx.boundに設定されます。もしx.boundが0ならば、可変長文字列と認識してx.valの長さを調べます。

例) CORBA::Any_varにCORBA::Boolean型と文字列を挿入する。

ユーザ定義の型については、<user type>型を扱うオペレータがIDLコンパイラによって自動的に生成されます。

引数で渡したメモリ領域の管理は引数の型により異なります。

operator<<=(CORBA::Any& any, const <user type>& x)はxをコピーしてanyに挿入します。

operator<<=(CORBA::Any& any, <user type>* x)はコピーせずにanyに挿入されます。値のメモリ領域の解放はanyによって行われます。

例) CORBA::Any_varに構造体を挿入する。

配列の挿入にはArray_forany(実際にはArrayの部分に配列の型名が入る)という補助型がIDLコンパイラによって生成されます。配列を挿入する例についてはC++マッピング「配列のanyへの挿入」を参照してください。

戻り値

ありません。

エラー

コピーに必要なメモリ領域を確保できなかったときは、値にヌル・ポインタがセットされます。

関連項目

C++マッピング「any」

注意

コピーが行われない<<=オペレータが使用されたときには、CORBA::Any_varがデストラクトされるときに保持している値も解放されます。2重解放にならないように注意してください。また、CORBA::Any_varに挿入した後は値を操作してはいけません。

CORBA::String_var型を引数にして可変長文字列を挿入する場合、R4.5以前では、CORBA::Any_var::operator<<=(const char*)が呼び出されましたが、R5.1以降では、CORBA::Any_var::operator<<=(char*)とCORBA::Any_var::operator<<=(const char*)のどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。
また、char*型を引数にして可変長文字列を挿入する場合、R4.5以前では、CORBA::Any_var::operator<<=(const char*)が呼び出されますが、R5.1以降では、CORBA::Any_var::operator<<=(char*)が呼び出されます。
どちらの場合も、R4.5以前と同様の動作をさせたいときは、引数をconst char*型に明示的にキャストする必要があります。



CORBA::Anyの利用を補助する型