У меня есть два обьекта в с++ , но при этом один внутри другого.
class obj_el{
void set_a(arg){
code...
}
};
class obj {
public:
int a;
obj_el b;
};
obj d;
d.b.set_a(arg);
При вызове последней строки нужно сделать так, чтобы d.a = arg.
Но как мне получить доступ к родительскому обьекту обьекта b?
Можго ли в обьект b передать сам d и через это изменить?
class obj_el{
obj_el(obj*p){ pptr = p}
void set_a(arg){
p->a =arg;
}
obj* pptr;
};
class obj {
public:
obj():b(this){}
int a;
obj_el b;
};
obj d;
d.b.set_a(arg);
Ну, костыль присобачить можно, хотя лучше бы так не делать: https://ideone.com/qkgwT9
#include <iostream>
#include <cstddef>
using namespace std;
class obj_el {
obj_el() {}
friend class obj;
public:
void set_a(int arg);
};
class obj {
public:
int a;
obj_el b;
};
void obj_el::set_a(int arg) {
((obj*)((char*)this - offsetof(obj, b)))->a = arg;
}
int main() {
obj d;
d.b.set_a(42);
cout << d.a << endl;
return 0;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей