なんとなく

 上の報告書を書きながら Linq みたいなことを C++/CLI でやるにはどうするんだろうとか、考えてました。
 構文に関しては、 for each を前提に考えてみます。なぜかというと、C++/CLI では 唯一、制御文でありながら IEnumerable の実装を前提としたループを行うものだからです。
 その実装は次のようになります。

{
^ e;
try {
e = .GetEnumerator();
while ( e->MoveNext() ) {
T d = safe_cast( e->Current );
statement
}
} finally {
delete e;
}
}

 これはつまり、for each は単なるシンタックス・シュガーであり、コンパイル時には上記のように展開されることを示しています。
 まぁ、ぶっちゃげ、IEnumerable を実装した中間クラスを作って渡してやれば、まねごとみたいなことはできるんじゃないかと。

for each ( String^ name in gcnew Sort(key_map) ) {...}

こんな感じ。後は、コンディションをいかに渡すか、になるんでしょうね。
うーん、なんか、微妙にできそうな。
 えーっと、基底クラスで Where とか、Condition とか、Sort とかを用意して、virtual 関数で明示的に条件を上書きすれば、順次アクセス可能なオブジェクトに対してはいけないかな。