I have two functions: one is scalar multiplication for a vector and other - vector-matrix multiplication:
pure T[] mul(S, T)(S s, T[] a)
and
pure T[] mul(T)(T[] a, T[][] B)
Of course this leads to a conflict, as S
can be a vector too, so that first template covers the second. How do I tell compiler, I want only scalar type to be S
?
You need to use a template constraint.
pure T[] mul(S, T)(S s, T[] a) if (isScalarType!S)
This declares that the template should only be considered when isScalarType!S
is true
.
isScalarType
can be found in std.traits
.
In D, the scalar types are the numeric types, character types, and bool
. You can restrict further using the other traits from std.traits
if you like (e.g. isNumeric
or isFloatingPoint
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With