Slide 11
Slide 11 text
UFCS最強
struct Vector(size_t D, T = double)
if (__traits(isFloating, T)) {
T[D] num;
alias num this;
}
T dot(size_t D, T = double)
(const Vector!(D, T) lhs, const Vector!(D, T) rhs)
{
T res = 0;
static foreach (i; iota(D)) res += lhs.num[i] * rhs.num[i];
return res;
}
Vector!(D, T) cross(size_t D, T = double)
(const Vector!(D, T) lhs, const Vector!(D, T) rhs)
if (D == 3) {
return Vector!(D, T)([
lhs.num[0] * rhs.num[1] - lhs.num[1] * rhs.num[0],
lhs.num[1] * rhs.num[2] - lhs.num[2] * rhs.num[1],
lhs.num[2] * rhs.num[0] - lhs.num[0] * rhs.num[2]
]);
}
Uniform Function Call Syntax
void main()
{
auto v0 = Vector!3([ 1, 2, 3 ]);
auto v1 = Vector!3([ 4, 5, 6 ]);
writeln(v0.cross(v1));
writeln(v0.dot(v1));
}
↓同じくこんな感じで呼べる