D 可以将函数专门用于常量参数(在编译时已知),通常用于pow(base, exponent)
ifexponent
是一个常量整数。由于 C++ 缺乏此功能,因此它不得不求助于模板专业化黑客,这会掩盖 API,例如pow
Boost.Units 中的函数模板。
但是,不能在线性代数包中使用常量参数专门化来专门化矩阵运算,例如针对固定维度情况的矩阵向量乘法,例如 2-D/3-D 中常用的 2x2、3x3、3x3、4x3 和 4x4图形。这些重载通常是使用 SIMD 指令(内在函数)实现的,如果这些实现可以由这样的库自动选择用于合适的固定大小的矩阵和向量,那就太棒了。
我相信这将是 D 的真正杀手级应用,尤其是在科学可视化方面。这是因为更高/动态维度线性代数和固定维度 2-D/3-D 之间的桥梁对于使用实现这些想法的包的开发人员来说是完全透明的。
已经有几个不错的用于 D 的 2-、3-和 4-D 线性代数包,例如 gl3n。我很乐意看到它被扩展以提供包含在 C++ 库中的函数,例如 Eigen 和 Armadillo。