D言語によるテンプレートプログラミング

D言語ではテンプレート引数に、(bool、int、real、char、string 等)、(数値と文字列)、記号(モジュール名、クラス名、関数名、関数リテラル等)を用いることができます。記号をテンプレート引数にする場合は、alias を使って宣言します。

template.d
import std.stdio;

template Tmplt(T, int I) {
  T t;
  struct Strct {
    T t;
  }
  T foo(T t) {
    return I + t;
  }
}

class Clss(T, int I) {
  T t;
  T foo(T t) {
    return I + t;
  }
}

T fnctn(T, int I)(T t) {
  return I + t;
}

int apply(alias A)(int i, int j) {
  return A(i, j);
}

int add(int i, int j) {
  return i + j;
}

void main() {
  Tmplt!(int, 0).t = 0;
  Tmplt!(int, 0).Strct strct = {0};
  writeln(Tmplt!(int, 0).foo(1));
  auto clss = new Clss!(int, 0);
  writeln(clss.foo(1));
  writeln(fnctn!(int, 1)(1));
  writeln(apply!(add)(1, 1));
  writeln(apply!((int i, int j) => i + j)(1, 1));
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中