2011-05-28-01-Collection を使用したコンテナを考えてみる
>> Site top >> weblog >> 月別アーカイブ >> 2011年05月のlog >> 2011-05-28-01-Collection を使用したコンテナを考えてみる
最終更新日付:2011/05/28 01: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-2021 project-enigma.
Generated by CL-PREFAB.