D は、定数引数 (コンパイル時に知られている) で関数を特殊化できます。通常は、定数整数のpow(base, exponent)
場合です。exponent
C++ にはこの機能がないため、代わりにpow
、Boost.Units の関数テンプレートなどの API を覆い隠すテンプレート特殊化ハックに頼る必要があります。
しかし、定数引数の特殊化を線形代数パッケージで使用して、2-D/3-D で一般的に使用される 2x2、3x3、3x3、4x3、4x4 などの固定次元の場合の行列ベクトル乗算などの行列演算を特殊化することもできませんでした。グラフィック。これらのオーバーロードは、通常、SIMD 命令 (組み込み関数) を使用して実装されます。これらの実装が、適切な固定サイズの行列とベクトルのライブラリによって自動的に選択されるとしたら、素晴らしいことです。
これは、特に科学的な視覚化において、D にとって本当にキラーなアプリケーションになると思います。これは、高次元/動的次元の線形代数と固定次元の 2-D/3-D の間のブリッジが、これらのアイデアを実装するパッケージを利用する開発者に対して完全に透過的にできるためです。
gl3n など、D 用の優れた 2、3、4 次元線形代数パッケージが既にいくつかあります。Eigen や Armadillo などの C++ ライブラリに含まれる関数を提供するように拡張されることを期待しています。