"Andrei Alexandrescu" <[email protected]> wrote in message news:[email protected]...
I was coding a simple Euclidean distance function with limit:double euclideanDistance(Range)(Range a, Range b, double limit) { limit *= limit; double result = 0; for (; !a.empty; a.next, b.next) { enforce(!b.empty); auto t = a.head - b.head; result += t * t; if (result >= limit) goto thatsit; } enforce(b.empty); thatsit: return sqrt(result); }How would an elegant goto-less approach look like? It should not duplicate code, e.g. the call to sqrt.
I would refactor the a/b.next and a/b.empty into a new range that does the enforcing and then you can use break.
L.
