У меня есть два класса, которые примерно определены следующим образом:
class Inner {
public:
bool is_first;
};
class Outer {
public:
char some_other_member;
Inner first;
Inner second;
}
Я знаю, что Inner
s всегда живет только внутри Outer
s, и что соответствующий флаг bool будет установлен на true
если и только если соответствующий объект является членом first
, а не second
.
Я ищу совместимый со стандартом способ получения указателя на объект Outer
, содержащий некоторые Inner
объект.Конечно, я мог бы просто хранить указатель внутри каждого Inner
объекта, но поскольку класс Inner
очень мал и у меня есть лотов , это кажется пустой тратой памяти (и, следовательно, драгоценного кэша)).
Очевидно, что компилятор должен знать смещение памяти между first
, second
и содержащим Outer
объектом.Вопрос заключается в следующем: существует ли совместимый со стандартом способ сказать компилятору «получить это смещение, вычесть его из указателя в Inner
и сделать его указателем Outer
»?
Я знаю, что мог бы использоватьприведение к void
, если Outer
будет содержать Inner
s в качестве базовых подобъектов (например, this ) - я очень чувствую, что нечто подобное должно быть возможным для подобъектов-членов?