2011-05-28-01-Collection を使用したコンテナを考えてみる - project-enigma

2011-05-28-01-Collection を使用したコンテナを考えてみる

>> Site top >> weblog >> 月別アーカイブ >> 2011年05月のlog >> 2011-05-28-01-Collection を使用したコンテナを考えてみる

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


Collection を使用したコンテナを考えてみる

2011 年 05 月 28 日

C++ 0x で追加される for の新しい使い方から、そんなことを考えた。

反復子を用いるシーケンスの処理の考え方は素晴らしいが、アルゴリズムに渡したりするのではなく、単純にループで処理したい場合など、反復子を使うのが面倒に感じる局面がある。しかし、C++ 0x で導入される for の新しい使い方なら、インデックスも反復子も使わないで要素を反復することができる‥‥‥らしい。

一方、Visual Basic には Collection なる仕組みがあり、これに対しては For Each を用いて(ひとまずは)似たようなことができる。つまり、反復子もループインデックスも使用しないループを構成することができるわけだ。そしてこの Collection クラス、別のクラスでラップしても For Each ループを活かすことができるようだ。これを使えば、どうやら似たようなことができる。たとえば以下のように。

Dim col As New GCollection
 
Call col.PushBack(0)
Call col.PushBack(1)
Call col.PushBack(2)

Dim v As Variant
For Each v In col
    MsgBox v
Next v

考えているのは、Collection をラップするようなクラスを作って、コンテナの一般的なインタフェイス(反復子を含む)をサポートすることだ。しかし、問題はこの Collection が今ひとつ正体不明なこと。配列のように使うことができるかと思えば、map のように使うこともできる。各種のオペレーションに関する性能的な特徴もドキュメントされていないように見える(実際に測ればわかるだろうが‥‥‥)。

本当にやりたいことはといえば、全てのコンテナクラスで For Each をサポートすることだ。しかし、それをやるには、IEnumVARIANT なるインタフェイスを実装せねばならないようだが、どうやらそれは Visual Basic だけを使用したクラスライブラリでは無理っぽいのだ。これは残念なところ。

ここに至った時点で、ひとまず「じゃぁいいや」となってしまった。イテレータを使わずに反復する、というだけのためにかける労力ではないだろう。というわけで、この件は無期限で忘れることにする。

 

コメント

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

 

このページのタグ

Page tag : STLとその移植

 

 


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