mixin

いままでmixinってなんだ?hoge!(foo)ってなんだ?って思ってたけど、ようはmixinはコードの展開でhoge!()って式はテンプレートから何かしらの式を現在のスコープに展開/取り込む式だってことが分かった。そうじゃなくて、C++だと<>で引数を取るんだけど、それだとシフト演算とかと勘違いしてしまうので、!()という構文を取り入れた、ということらしい。

import std.stdio;

template Hoge(T, T a)
{
  T x = a;
}

void main()
{
  ///int x = 42;が現在のスコープに展開される。
  mixin Hoge!(int, 42);
  writefln("%d", x);
  {
    mixin Hoge!(int, 0);
    writefln("%d", x);
  }
  writefln("%d", x);
  return;
}

テンプレート再訪 - プログラミング言語 D (日本語訳)
テンプレート・ミックスイン - プログラミング言語 D (日本語訳)
ミックスイン - プログラミング言語 D (日本語訳)