Eric Niebler pravi:
Are you certain I am wrong? The array is multidimensional and contiguous in memory. The boost::begin() and boost::end() just return pointers. I have checked if all the floats scale correctly and they do. I'm pretty certain. You're straying into undefined behavior by making a range using iterators from different arrays.
The make_iterator_range() function sees only 2 pointers and these are all it cares about. Now, let's check the standard: ISO-IEC-14882 Section 8.3.4 Array, page 137: An object of array type contains a contiguously allocated non- empty set of N sub-objects of type T. The pointers I provide point to the beginning and the end of the vertices multidimensional array. The array must be contiguously allocated, as specified in the standard, hence I don't see which aspect of what I am doing in undefined, if the functions boost::begin() and boost::end() work as expected (again, they return pointers, not fancy iterator objects). Did I mention the debugger shows everything is just perfect.
Why not just use BOOST_FOREACH correctly?
BOOST_FOREACH(float (&rgf)[3], vertices) BOOST_FOREACH(float& f, rgf) f *= scale;
Double loop, oops. Not fancy enough.
Are you joking?
I was looking for fancy (i.e. elegant) code, yours is too complicated.