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