もう一度プログラムの設計を見直して、テンプレートを少なくしてみた。今までは速度向上のために、制約式や条件が増えるたびに新しいテンプレート引数を作っていたが、これらは整数のビットフラグにしてテンプレート引数に渡すことにした。これで、拡張性の問題はクリア。
さらに、これまでテンプレートで次元ごとに書いていたコードを、次元に依存しない形のインライン関数群で記述してみた。ここでのインライン関数は、数式をボトムアップに記述した構造になっている。今後、最適化はコンパイラに任せることになるけど、コンパイル時にはテンプレートによって次元が定数になるので、うまく最適化されるようだ。むしろ実行速度はあがった。
これでまた、コード量が減り、わかり易くなり、拡張性が向上し、速度もあがりました。よかったよかった。