内包表記的な何か続き
一時変数を予め宣言しなくても良いcompが出来ました。_!(T)を使います…
void* placeholder; T _(T)(){ return *(cast(T*)placeholder); } U[] comp(T, U)(T ary, lazy U dg){ U[] ret; foreach (val; ary){ placeholder = &val; ret ~= dg; } return ret; } void main(){ int x; int[] ary = [1, 2, 3, 4, 5]; foreach(v; ary.comp(_!(int)*_!(int))){ writefln(v); } }
ダサいだけなら兎も角、かなり怪しいです。ネストさせたら使えないし。キャスト使ってる時点でどうかという説もあります。
暗黙の型変換がない以上は諦めるしかないのでした。まあこの辺は言語の限界だと思います…