2011-05-15-01-Tuple の追加 - project-enigma

2011-05-15-01-Tuple の追加

>> Site top >> weblog >> 月別アーカイブ >> 2011年05月のlog >> 2011-05-15-01-Tuple の追加

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


Tuple の追加

2011 年 05 月 15 日

5年振りに、VBGeneric をイジろうと思いたった。

今回やろうと思ったのは、Tuple クラスの追加だ。C++ 0x に追加される予定だということで、しばらく前から気にはなっていた。そして、ちょっと変則的ではあるものの、VBGeneric に取り込むことが可能だという判断ができたので、今回手を動かしてみたわけだ。

具体的な使い方としては、Utility の新設メソッド MakeTupleを使ってコンストラクトするのが一番簡単だ。ParamArray で受け取るので、任意個数の要素を渡すことができる。

Dim tpl As Tuple
Set tpl = Utility.MakeTuple("kagelow", 36, "Tokyo")

もちろん Visual Basic なので、内部的には Variant 配列を使うことしかできない。だから、GVector とやっていることは似たようなものだ。要素へのアクセスも、規定のプロパティになっている At を使う。

Dim name  As String
Dim age   As Long
Dim place As String
 
name = tpl(0)
age = tpl(1)
place = tpl(2)

ただし、Tie メソッドを使ってまとめて取得することも可能。

Call tpl.Tie(name, age, place)

等値検査や順序付けの方法は Pair と同じ。Utility の MakeTupleEqual とMakeTupleLess を使う。クラス型が要素でなければパラメータは何もいらない。明示したければ Nothing だ。

Dim eq As BinaryFunction
Dim ls As BinaryFunction
 
Set eq = Utility.MakeTupleEqual(Nothing, Nothing, Nothing)
Set ls = Utility.MakeTupleLess(Nothing, Nothing, Nothing)

いずれにせよ、VBGeneric がこれまでそうであったように Variant Based Generic なので、タイプセーフネスはゼロだ。要素数が3以上の組みを作る場合、それだけでクラスを1つ作成する必要があったが、Tuple でなんとかできる場合があるだろう。

問題は、いつリリースするかだ‥‥‥HTML Help で作成していたドキュメントを全面的に刷新したいし。

 

コメント

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

 

このページのタグ

Page tag : STLとその移植

 

 


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