概要
ここでは、C++/CLIの着目すべき文法のうち、CLI 配列型を中心に解説しています。
CLI 配列型
CLI 配列型は、ネイティブな配列と異なり、CLI ヒープ上に領域確保され、一つ以上の位階(ランク)を持つことができます。
位階はそれぞれの配列要素ごとに関連する指示数によって決定されます。
CLI 配列の位階はまた配列の次元とも呼びます。
int型のcli::arrayを要素数4で作る場合は以下のようにします。
arrayは常にハンドルを用いて利用しなければなりません。
まarrayの型にref classを用いることはできず、ref classのハンドルを用いなければなりません。
cli::arrayの要素数を知るには、Lengthを使います。
2次元arrayは以下のように作ります。
1の位階を持つ配列は1次元配列とも呼ばれ、1より多い位階を持つ CLI 配列のことを多次元 CLI 配列と呼びます。
ハンドル arr1D は int の任意長の一次元配列として作成されます。
それは現在、四つの int 要素を含む、一つの配列を参照します。
読み込みのみプロパティ Array::Length は要素数を含んでいます。
ハンドル arr3D は int の任意の 3 次元配列を参照することができます。
それは現在、10×20×30のサイズの、int のデフォルト値、つまり 0、を要素全てに詰め込んだ配列一つを参照します。
可変長配列引数
System::Object^ 型の CLI 配列型を配列パラメータとして宣言することで、パラメータは雑多な型の引数を取ることができます。
例としては、
このようなarray引数をparameter arrayといいます。
parameter array引数は、1つの関数で1つしか宣言できません。
しかし他の引数とともに使うことができます。
この場合、parameter arrayは最後の引数にしなければなりません。
C++11の読みにくいテンプレートを利用したものと比べれると、
格段に理解しやすく取り扱いがしやすいと言えます。
C++11の可変個引数テンプレート
対比の意味で、C++11の可変個引数テンプレートの処理を記載する