C言語にはなぜか二進数リテラルがないため、そういうことをしたい場合自分で何とかする必要がある。 D言語には普通に二進数リテラルがあるが、同じことをするコードを書いてTemplate Mixinの練習をすることにした。 与えられた型の表現できる範囲の二進数リテラルを生成する。

どんなコードが生成されているか見てみる。

$ dmd binary.d -unittest -main -vcg-ast

binary.d.cg

全体はこちらubyteで表現できるすべての値の8文字以下の二進数表現を網羅している。 コードの文字列を生成して、1つのmixinに渡している。

mixin template binary(T)
{
    foreach(...){
        mixin(...);
    }
}

上のようにmixinforeachで回したいところだが、それをするためのstatic foreachはまだ Preliminary Review Round 1 なのでのんびり待とう。

追記: static foreachが使えるようになった!