我有两个函数:一个是向量的标量乘法,另一个是向量矩阵乘法:
pure T[] mul(S, T)(S s, T[] a)
和
pure T[] mul(T)(T[] a, T[][] B)
当然,这会导致冲突,S
向量也可能如此,因此第一个模板覆盖了第二个模板。我如何告诉编译器,我只想要标量类型S
?
您需要使用模板约束。
pure T[] mul(S, T)(S s, T[] a) if (isScalarType!S)
这声明模板只应在isScalarType!S
is时考虑true
。
在 D 中,标量类型是数字类型、字符类型和bool
. std.traits
如果您愿意(例如isNumeric
或isFloatingPoint
),您可以进一步限制使用其他特征。