2011-05-22-01-コンテナ初期化の方式を追加 - project-enigma

2011-05-22-01-コンテナ初期化の方式を追加

>> Site top >> weblog >> 月別アーカイブ >> 2011年05月のlog >> 2011-05-22-01-コンテナ初期化の方式を追加

最終更新日付:2014/01/02 00:00:00


コンテナ初期化の方式を追加

2011 年 05 月 22 日

Tuple の初期化方法から、コンテナの初期化方法がもうひとつあることに気付いた。

これまで、VBGeneric のコンテナには(たいてい)4 種類の初期化方法があった。GVector を例にとろう。まず、単純な New で、これはデフォルトコンストラクタに該当する。

   Dim gv As GVector
   Set gv = New GVector

そして、それ以外は Containers ユーティリティの力を借りることになる。まず、要素数を指定する Containers.VectorN がある。

   Set gv = Containers.VectorN(10, 0)    '// 10 個の 0 で初期化

次に、シーケンスを渡して初期化する Containers.VectorRange がある。これの利点は入力反復子のシーケンスなら何でも渡せる点だ。

   Dim gl As GList
       :
       :
   Set gv = Containers.VectorRange(gl.First(), gl.Last())

最後に、コピーコンストラクタに該当する Containers.VectorCopy がある。

   Dim other As GVector
       :
       :
   Set gv = Containers.VectorCopy(other)

今回追加するのは、(GVectorで言えば)Containers.VectorValues だ。これは、ParamArray 引数を利用して、任意個の要素をパラメータで直接渡す。以下のように、かなり直接的な記述になる。

   Set gv = Containers.VectorValues(9, 6, 3, 5, 7, 1, 2)

この対応によって、C++ 0x でコンテナを直接的に初期化するやりかた(に近い)記法がサポートできるようになった、ということになる。追加されたのは、以下の7種類だ。

最後の2つのメソッドに関しては、キーと値の Pair を渡す必要がある。そして、Set と Map 向けのメソッドに関しては、値(またはキー)の重複がある場合には一部の要素が入らないことがある‥‥‥と。まぁこんなところかな。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : STLとその移植

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.