13.1.25.1 型付き値の処理
一致しないTypeCodeや値でanyが作成される可能性を低くするには、C++関数のオーバーロード機能を使用します。具体的には、OMG IDL仕様の特定の型ごとに、その型の値を挿入および抽出するためのオーバーロード関数が用意されています。ネームスペースの純粋さが損なわれるのを完全に防ぐには、これらの関数にオーバーロード演算子を使用します。これらの関数については以下で詳細に説明しますが、特徴としては、anyに挿入またはanyから抽出される値のC++の型によって適切なTypeCodeが示されるという点です。
後述する型保障anyインタフェースはC++関数のオーバーロードに基づいているため、OMG IDL仕様から生成されるC++の型は別々のものである必要があります。ただし、この要件が満たされない特別な場合があります。
- OMG IDLのBoolean、octet、およびchar型は、それぞれ異なるC++型にマッピングする必要はありません。したがって、関数のオーバーロードを行うためには、互いの型を区別する方法が別に必要となります。これらの型を互いに識別する方法については、「Boolean、Octet、Char、および制限付き文字列の識別」を参照してください。
- 文字列が制限付きか無制限かに関係なく、文字列はすべて
char*にマッピングされます。そのため、制限付き文字列値でanyを作成または設定する方法が別に必要となります。 - C++では、関数の引数リスト内の配列は、その最初の要素へのポインタに集束されます。したがって、関数のオーバーロードは、サイズが異なる配列の区別には使用できません。配列を扱う際に
anyを作成または設定する方法については、下記および「配列」を参照してください。
親トピック: Any型