c++ - Member pointer to array element -


it's possible define pointer member , using later on:

struct foo { int a; int b[2]; }; 

int main() {
foo bar; int foo::* aptr=&foo::a; bar.a=1; std::cout << bar.*aptr << std::endl; }

now need have pointer specific element of array, i'd write
int foo::* bptr=&(foo::b[0]);
however, compiler complains "invalid use of non-static data member 'foo::b'" possible @ (or @ least without unions)?

edit: need pointer specific element of array, int foo::* ptr points second element of array (foo::b[1]).

yet edit: need access element in array bar.*ptr=2, pointer gets used somewhere else, can't called bar.*ptr[1]=2 or *ptr=2.

the problem is, accessing item in array level of indirection accessing plain int. if array pointer instead wouldn't expect able access int through member pointer.

struct foo { int a; int *b; }; int main() { foo bar; int foo::* aptr=&(*foo::b); // can't either! bar.a=1; std::cout << bar.*aptr << std::endl; } 

what can define member functions return int want:

struct foo { int a; int *b; int c[2]; int &geta() { return a; } // changed return references can modify values int &getb() { return *b; } template <int index> int &getc() { return c[index]; } }; typedef long &(test::*intaccessor)(); void setvalue(foo &f, intaccessor ptr, int newvalue) { cout << "value before: " << f.*ptr(); f.*ptr() = newvalue; cout << "value after: " << f.*ptr(); } int main() { intaccessor aptr=&foo::geta; intaccessor bptr=&foo::getb; intaccessor cptr=&foo::getc<1>; int local; foo bar; bar.a=1; bar.b = &local; bar.c[1] = 2; setvalue(bar, aptr, 2); setvalue(bar, bptr, 3); setvalue(bar, cptr, 4); setvalue(bar, &foo::getc<0>, 5); } 

then @ least have consistant interface allow change different values on foo.


Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

c++ - Accessing inactive union member and undefined behavior? -

php - Get uncommon values from two or more arrays -