
On 9/20/06, me22 <me22.ca@gmail.com> wrote:
You could just wrap vector_add in an operator+, but the original intension was to provide not only a generic way of handling any type of binary operation between vectors and/or scalars, but also to have it compile to
On 9/20/06, Olivier Grant <olivier.grant@gmail.com> wrote: the
most efficient code possible. I also wanted to allow the user to know exactly what he is doing when performing function calls :
res = v1 * scalar + v2;
I think the following syntax really makes you sure you control what is happening :
vector_mul(v1, scalar, v1); vector_add(v1, v2, res);
In highly sensitive software that needs to perform very fast, I think developers would prefer this kind of syntax. The other advantage I see is to easily allow developers to use this function as a default implementation eventually replacing it with a architecture specific version if necessary/possible.
Personally, I'd much prefer the infix version. And of course, your 2 snippets do rather different things.
One advantage of expression templates is that you can write res = v1 * scalar + v2; and still have it be evaluated the efficient way without the temporaries.
I agree, i'm not saying you can't generate as efficient code - after all, operators are just like functions pretty much - but just that it sometimes gives a better sense of control over what you are doing. But this is just a preference. As for your way, you can do the same thing without the confusion of
ternary "add" simple by overloading @= : res = v1; res *= scalar; res += v2; No temporaries and possibly even faster than your ternary version.
I've actually compared the resulting assembly code generated by gcc between the two code snipplets and it turns out they match. You could anyway just wrap the functions in their equilalent operator overloads. And a whole lot easier to read -- I would be VERY confused by which is
in and which is out in vector_add(v1, v2, v3);
RTFM :) Sorry, just thought it would be funny. I agree that operators make for a much more readable and intuitive syntax, but I think that with good documentation, as comments and in the choise of parameter names, and consistency, you should be able to use these functions without ~ Scott McMurray
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost