v.176
std.bindっていうboost::bindをインスパイアしたライブラリが出来たみたいです。
import std.bind; import std.stdio; import internal.qsort; void sort(T,Cmp)(T[]a,Cmp cmp){ auto ti = new class TypeInfo{ size_t tsize(){return T.sizeof;} int compare(void*a,void*b){return cmp(*cast(T*)a,*cast(T*)b);} int equals(void*a,void*b){return compare(a,b)==0;}}; Array x;x.ptr = a.ptr;x.length = a.length; _adSort(x,ti); } int compare(T)(T a,T b){return typeid(T).compare(&a,&b);} void main(){ auto x = [2,3,1]; sort(x,&compare!(int)); // 昇順でsort writefln(x); sort(x,bind(&compare!(int),_1,_0));//降順でsort writefln(x); }
D言語はなんか関数型っぽい機能がどんどん入っていってるなぁ。
あと,さりげなくstd.bindの中でTupleが定義されてますけど、
Tupleは汎用性が非常に高いですし、bindとは独立で提供してほしいなぁ。