Как загрузить структуру, зная первый элемент?

Я вижу в некоторых местах

struct dri2_egl_config *dri2_conf = dri2_egl_config(conf);

где структура

struct dri2_egl_config
{
_EGLConfig         base;
const __DRIconfig *dri_single_config;
const __DRIconfig *dri_double_config;
};

а также conf является _EGLConfig*,
Но когда я попробовал это на C ++, он не компилируется. Как я могу сделать это на C ++ для доступа к другим параметрам структуры?

0

Решение

Это похоже на наследование в C. Как для C ++, так и для C стандарт гарантирует отсутствие переупорядочения полей.
Поэтому в C адрес базовых полей гарантированно совпадает с целыми структурами.

dri2_egl_config () в C кажется нормальным функционалом. в C ++ это был бы конструктор, никогда не возвращающий указатель.
Кроме того, адресация в C ++ более сложна, если вы хотите рассмотреть виртуальную информацию. Для простых случаев, когда нет виртуальных методов и т. Д., Вы все равно можете обращаться через смещения адресов, если вы знаете размеры полей.
Но это потребует приведения типов для согласованности типов указателей. Поэтому кажется, что dri2_egl_config () возвращает dri2_egl_config *. И это все прямо С.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector