On Jun 27, 3:00*pm, Victor Bazarov <(E-Mail Removed)> wrote:

> Greg Herlihy wrote:

> > On Jun 27, 10:42 am, Victor Bazarov <(E-Mail Removed)> wrote:

> >> (E-Mail Removed) wrote:

> >>> Say I have two classes:

> >>> class A

> >>> {

> >>> public:

> >>> * * int x;

> >>> };

> >>> class B

> >>> {

> >>> public:

> >>> * * A a;

> >>> };

> >>> Then how do I construct a member pointer to B::a.x ? What's the syntax

> >>> for it?

> >> Why do you think you need it? *Does this help:

>

> >> * * *B b;

> >> * * *int *ptr = &b.a.x;

>

> > The question seems to me to be asking for a member pointer - not a

> > pointer to a (data) member. If that is the case, then the answer would

> > be that it is not possible to create a single, member pointer to

> > b.a.x. Instead it is necessary to declare two member pointers (one for

> > B::a and the other for A:) and then apply them both. For example:

>

> > * * struct A

> > * * {

> > * * * * int x;

> > * * };

>

> > * * struct B

> > * * {

> > * * * * A a;

> > * * };

>

> > * * int main()

> > * * {

> > * * * * B * b;

> > * * * * A * B::*pa = &B::a;

> > * * * * int A::*pi = &A:;

>

> > * * * * b.*pa.*pi = 3; // assigns 3 to b.a.x

> > * * }

>

> > Greg

>

> I would like to see what the OP has to say about his/her need to create

> such a construct.

>

> V

> --

> Please remove capital 'A's when replying by e-mail

> I do not respond to top-posted replies, please don't ask
Here is an example (probably over-simplified from the actual case I'm

working on). Say I have a 2D vector class:

struct vector2d

{

double x,y;

static double vector2d::* const _v[2];

double& operator[] (int i) { return this->*_v[i]; }

const double& operator[] (int i) const { return this->*_v[i]; }

};

double vector2d::* const vector2d::_v[] = { &vector2d:

,

&vector2d::y };

and suppose we have an object "vector2d v;" . The purpose of using

pointer to member here is to make v[0] and v.x have exactly the same

run-time efficiency, provided that the compiler is capable of

necessary optimization. (I didn't invent this technique, but I forgot

where I learned it).

Suppose now for some reason, I want to build a 5D vector class out of

this 2D vector class, say like this.

class vector5d

{

vector2d v1, v2;

double z;

};

and we have an object "vector5d w;"

What I want is, with as little run-time overhead as possible (maybe

using a similar method that's used by vector2d), that w[0] gives me

w.v1.x , w[1] gives w.v1.y , w[2] gives w.v2.x , w[3] gives w.v2.y ,

and w[4] gives me w.z .

Is it possible? If yes, how?

Thanks!