N
Nephi Immortal
Please look at my code below. You may notice operator->* with
comments. Figure out why it does not make any sense.
struct data;
typedef void ( data::*pGo )();
struct data {
char x;
char y;
pGo Go;
void Run() {
}
};
struct storage {
data *pData;
data *operator->() {
return pData;
}
storage &operator->*( pGo p ) {
( pData->*p )();
return *this;
}
};
int main()
{
data d; storage s;
s.pData = &d;
s->x = 1; s->y = 2; s->Go = &data::Run;
( d.* d.Go )(); // OK
( d.* s->Go )(); // OK
s.operator->*( s->Go ); // ??? Works fine
s->*( s->Go ); // ??? Works fine
( s->* s->Go )(); // Should be, but does not work!
return 0;
}
comments. Figure out why it does not make any sense.
struct data;
typedef void ( data::*pGo )();
struct data {
char x;
char y;
pGo Go;
void Run() {
}
};
struct storage {
data *pData;
data *operator->() {
return pData;
}
storage &operator->*( pGo p ) {
( pData->*p )();
return *this;
}
};
int main()
{
data d; storage s;
s.pData = &d;
s->x = 1; s->y = 2; s->Go = &data::Run;
( d.* d.Go )(); // OK
( d.* s->Go )(); // OK
s.operator->*( s->Go ); // ??? Works fine
s->*( s->Go ); // ??? Works fine
( s->* s->Go )(); // Should be, but does not work!
return 0;
}