struct vs class for small math types?
Bill Baxter
wbaxter at gmail.com
Tue Oct 24 13:40:00 PDT 2006
Seems like struct is the way to go for implementing small math types
like 3D vectors or quaternions that have POD semantics.
However, for example, with 4 doubles in a quaternion we're talking 32
bytes for just one of those guys. Normally in C++ I would write
operator overloads and such using 'const quat&' as the argument type to
avoid copying the data on the stack. Is there a way to do that in D?
Should I be worried? General rule of thumb for C++ I got from somewhere
(a Scott Meyers book?) is, if the data is bigger than a pointer, pass it
by const reference rather than by value.
The lack of constructors or usable initializers seems another issue for
structs. I guess I'm supposed to use static opCall to make something
that looks like a constructor:
static vector opCall(double x, double y, double z)
{
vector ret;
ret.x = x; ret.y = y; ret.z = z;
return ret;
}
and opAdd then looks like
vector opAdd(vector v) { return vector(x+v.x, y+v.y, z+v.z); }
which makes the syntax for opAdd and the rest not so bad, but makes me
more worried about extra temporaries created in an expression like
vector c = a + b.
(Also it took me a while to realize I could use static opCall for this
purpose. I don't think it as obvious as would be using the same
constructor syntax as classes -- which is what I tried first).
--bb
More information about the Digitalmars-d-learn
mailing list