With a class definition, an object pointer and a pointer-to-member, it is possible to obtain an absolute pointer to that member:
class X {
public:
int a { 0 };
int b { 1 };
int c { 2 };
};
X x;
X* xptr = &x;
int X::* pointer_to_member = &X::b;
int* absolute_pointer = &(xptr->*pointer_to_member); // want to invert this line
std::cout << *absolute_pointer << std::endl; // prints 1
I am looking for the inverse of the line before the last line of my sample code: Having an absolute_pointer
pointing to some member of some object and a pointer_to_member
to the same member of that object type, is it possible to recover the pointer to the object itself?
I am aware, that the trick can be done "C-style" with a few reinterpret_cast()
s and offsetof
. But is there a cleaner way to do it, like an official language feature or at least an official macro?