I’ve got two classes: a template class, and a regular class that inherits from it:
template <int N> class Vector
{
float data[N];
//etc. (math, mostly)
};
class Vector3 : public Vector<3>
{
//Vector3-specific stuff, like the cross product
};
Now, I’d like to have x/y/z member variables in the child class (full members, not just getters – I want to be able to set them as well). But to make sure that all the (inherited) math works out, x would have to refer to the same memory as data[0], y to data[1], etc. Essentially, I want a union, but I can’t declare one in the base class because I don’t know the number of floats in the vector at that point.
So – can this be done? Is there some sort of preprocessor / typedef / template magic that will achieve what I’m looking for?
PS: I’m using g++ 4.6.0 with -std=c++0x, if that helps.
Edit: While references would give the syntax I’m looking for, the ideal solution wouldn’t make the class any bigger (And references do – a lot! A Vector<3> is 12 bytes. A Vector3 with references is 40!).
To finish off an old question: No. It makes me sad, but you can’t do it.
You can get close. Things like:
or
or
or even
are within reach (see the other answers – they’re all very good). But my ideal
just isn’t doable. Not if you want to inherit all your functions from the base class.
In the end, the code in question ended up getting tweaked quite a bit – it’s now strictly 4-member vectors (x, y, z, w), uses SSE for vector math, and has multiple geometry classes (Point, Vector, Scale, etc.), so inheriting core functions is no longer an option for type-correctness reasons. So it goes.
Hope this saves someone else a few days of frustrated searching!