メタ記述

といえばやねうらおさんも考察されていたわけですけど (http://www.sun-inet.or.jp/~yaneurao/newlang/chap0000.html)、 ぶっちゃけ気合い入ったプリプロセッサってスクリプト言語になるわけで、…つまり eruby で書いちまえ。

Typelist1 から 4 を

template Typelist1(T1) {
	alias Typelist!(T1, NullType) value;
}

<%=
(2..30).collect do |i|
  "template Typelist#{i}(" +
  (1..i).collect do |j|
    "T#{j}"
  end.join(', ') +
  ") {\n" +
  "    alias Typelist!(T1, Typelist#{i-1}!(" +
  (2..i).collect do |j|
    "T#{j}"
  end.join(', ') +
  ").value) value;\n" +
  "}\n"
end.join('')
%>

で置き替えて、typelist.rbd とかいうファイルに保存、 eruby typelist.rbd > typelist.d でできあがり。実に美しくない解決だと思うのですよ。 boost-dev でもこういう話があったけど無視されてましたなあ…

あと何か Ruby に恨みでもありそうな書き方してみた。

Java 屋さんは Struts とか Velocity で書くと良いかもね。

追記: こりゃメタではないか。言語について何も知りませんから。でもプリプロセッサメタプログラミングっていうしなあ。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h