c++ - Nested data structure where children inherit data from parent -


i'm trying create nested data structure many layers deep every "child" can access data parent/grandparent/etc...

for example take these data structures:

struct grandchild {     int somegrandchilddata; }; struct child {     int somechilddata;     std::vector<grandchild> vgrandchild; }; struct parent {     int someparentdata;     std::vector<child> vchild; }; struct grandparent {     int somegrandparentdata;     std::vector<parent> vparent; }; 

the way i'd access data this:

void main() {     // create , fill in data     grandparent gp;     (int pnum = 0; pnum < 3; pnum++)     {         gp.vparent.push_back(parent());         (int cnum = 0; cnum < 3; cnum++)         {             gp.vparent[pnum].vchild.push_back(child());             (int gcnum = 0; gcnum < 3; gcnum++)             {                 gp.vparent[pnum].vchild[cnum].vgrandchild.push_back(grandchild());                  // call function , pass grandchild                 func(gp.vparent[pnum].vchild[cnum].vgrandchild[gcnum]);             }         }     } }  void func(grandchild &gc) {     int result = gc.somegrandchilddata;      // no need pass grandparent, parent, or child because     // grandchild can access of data them     result += gc.somechilddata; // <<-- how can achieve     result += gc.someparentdata; // <<-- how can achieve     result += gc.somegrandparentdata; // <<-- how can achieve } 

i'm trying because have structures many data members @ each nesting layer , when call functions it's extremely annoying have pass large numbers of arguments each function call , becomes mess keep organized.

any appreciated.

you keeping track of parent of every person(let's call node). so, every node, create object of direct parent inside of , every layer (grandchild, child, parent.. etc).

so each grandchild have child object, each child have parent object , each parent have grandparent object.

then able this:

void func(grandchild &gc) {     int datafromthegranchild  = gc.datafromgrandchild;     int datafromthechild      = gc.child.datafromchild;     int datafromtheparent     = gc.child.parent.datafromparent;     int datafromthegradparent = gc.child.parent.grandparent.datafromgrandparent;      //.. } 

Comments