Здесь у нас есть простая структура узла, которая может быть использована для реализации двойного связанного списка.C++: Как найти объект-хост из указателя на переменную-член
template <class T>
struct node {
node<T> *prev = NULL;
node<T> *next = NULL;
T data;
};
Предположив мы не знаем, или иметь ссылку на объект узла/например, но у нас есть указатель на это данные членов. T;
Как можно ссылаться/найти объект узла узла с указателя на его данных?
Вы не можете сделать это портативно. Вы можете найти способ взломать макрос 'offsetof' и' reinterpret_cast <> 'все вещи между' char * 'и' node * ', но это технически неопределенное поведение. Если вам нужно выразить двусторонние отношения, используйте обратные указатели от каждого дочернего узла до его родителя. –
Вы спрашиваете, как найти «голову» в списке? 'T * data;' выглядит странно BTW. –
У вас действительно есть указатель на член ('pointer == & node.data') или у вас есть указатель, хранящийся в этом элементе (' pointer == node.data')? Если последнее, вы не можете его найти. – StenSoft