如何确保D中的模板类型是标量?

aka*_*nuk 6 scalar templates d

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

pure T[] mul(S, T)(S s, T[] a)
Run Code Online (Sandbox Code Playgroud)

pure T[] mul(T)(T[] a, T[][] B)
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*der 10

您需要使用模板约束.

pure T[] mul(S, T)(S s, T[] a) if (isScalarType!S)
Run Code Online (Sandbox Code Playgroud)

这声明,当模板只应视为isScalarType!Strue.

isScalarType可以找到std.traits.

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