У меня есть ситуация, похожая на эту
struct Child
{
u16 x, y;
// other fields
};
struct Father
{
struct Child child1;
struct Child child2;
// other fields
};
Father tilemap[WIDTH][HEIGHT];
Теперь я только что понял, что хотел бы сохранить четыре байта для x, y, которые всегда имеют одинаковые значения для обоих потомков одного и того же отца.
По всему моему коду я передаю множество Father*
и множество Child*
, восстанавливая координаты с father->child1->x
или child1->x
соответственно. Я хотел бы безопасно переместить координаты на уровне Father
, но я не уверен в некоторых фактах.
Будет ли соблюден порядок объявленных полей по сравнению с какой-либо оптимизацией или возможной реализацией gcc / g ++? Могу ли я быть уверен, что &father == &father.child1
?
Настоящая проблема в том, что я передаю Child*
, не зная, является ли это полем child1 или child2, поэтому я не могу напрямую узнать смещение для восстановления адреса отца (и, следовательно, координат) .. Child
уровень, чтобы различать их, но смогу ли я тогда легко восстановить адрес отца?
Любое предложение будет оценено, спасибо
РЕДАКТИРОВАТЬ: просто как дополнительная информация, я использую C ++ в качестве основного языка, но эти структуры не содержат каких-либо странных методов, только поля и пустой конструктор.