文字列化テンプレート
配列だと、printf("%s") で出力できるが、連想配列だと化けて出力されるので、汎用の文字列化関数を作ってみた。
template ObjToString(T) { char toString(T value) { char buffer; static if (is (T : char)) buffer = value; else static if (is (T : Object)) buffer = value.toString(); else buffer = std.string.toString(value); return buffer; } } template MapString(Key, T) { char toString (T[Key] map) { char[] buffer = "["; foreach(Key key, T value; map) { buffer ~= ObjToString!(Key).toString(key); buffer ~= ":"; buffer ~= ObjToString!(T ).toString(value); buffer ~= ","; } buffer = chop(buffer); buffer ~= "]"; return buffer; } }
ただしこれ、なんでもできるわけではなく、Key や T が、char 以外の配列でできていたらアウトである。
is 式で、配列かどうかの判定ができるとよいのだが……
それと型が組み込み型かどうかの判定もできるともっと吉。