2006-03-01-01-VBGeneric version 1.03.356.001 - project-enigma

2006-03-01-01-VBGeneric version 1.03.356.001

>> Site top >> weblog >> 月別アーカイブ >> 2006年03月のlog >> 2006-03-01-01-VBGeneric version 1.03.356.001

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


VBGeneric version 1.03.356.001

2006 年 03 月 01 日

さて、陰郎個人としてはもっとも思い入れがあるにも関わらず1番不人気かもしれない作品、VBGeneric の4ヶ月ぶりのアップデートである。今回はファンクタの仕様変更ということで、旧バージョンとのバイナリ互換性はない。つまり、旧バージョンを使用してコンパイルしたものについては、リコンパイルが必要ということだ。

具体的にどのような変更が加わったかについては、以前書いたとおりだ。ファンクタインタフェイスであるUnaryFunction, BinaryFunction, GenerateFunction の Execute( ) メソッドがクラスの既定メソッドに指定された。これによって、Execute( ) メソッドを明示的に呼び出さなくても、あたかも C++ のファンクタのごとく operator( ) が実装されているかのように使用できる。以下のように。

Dim func As BinaryFunction
Dim ret As Long
 
Set func = New FooFunc
ret = func( 5, 3 )

ちょっと厄介なのは、これらのファンクタインタフェイスを実装するユーザークラスでも Execute( ) を既定メソッドに指定することが仕様上要求されることだ。例えば、上記の FooFunc がその仕様上の要求を満たしていない場合、上記コードは OK でも以下のコードはコンパイルエラーとなる。

Dim func As New FooFunc
Dim ret As Long
 
ret = func( 5, 3 )  '// コンパイルエラー!

実際のところ、ファンクタはインタフェイス経由で使用するべきなので、この点はそれほど心配はしていない。しかし、問題はもうひとつある。VBA 環境でファンクタを自作する場合、そもそも既定メソッドの指定ができないらしいのだ。これは環境上の制約としてドキュメントしておいた。

あとは、以前書いたとおり、スコープ外のオブジェクト(要するにクラスメンバとか大域オブジェクト)に対して復帰値を利用しない形式で既定メソッド呼び出しを使った場合にエラーが発生する。この点についてもドキュメントした。正直制約が多いが、なんとなく STL っぽい書き方ができるようになったので個人的には気に入っている。

...というわけで、2006 年最初の仕事は奇しくもVBGeneric となった。さて、Palmware に取り掛かるか...(おいおい正規表現エンジンはどうなった?)

 

コメント

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

 

このページのタグ

Page tag : STLとその移植

 

 


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