6

我有两个函数:一个是向量的标量乘法,另一个是向量矩阵乘法:

pure T[] mul(S, T)(S s, T[] a)

pure T[] mul(T)(T[] a, T[][] B)

当然,这会导致冲突,S向量也可能如此,因此第一个模板覆盖了第二个模板。我如何告诉编译器,我只想要标量类型S

4

1 回答 1

10

您需要使用模板约束

pure T[] mul(S, T)(S s, T[] a) if (isScalarType!S)

这声明模板只应在isScalarType!Sis时考虑true

isScalarType可以在std.traits.

在 D 中,标量类型是数字类型、字符类型和bool. std.traits如果您愿意(例如isNumericisFloatingPoint),您可以进一步限制使用其他特征。

于 2013-10-06T16:30:51.837 回答