6.7 Инициализация |
Предыдущая Содержание Следующая |
Обычно мы получаем описание класса отсылая new() к описанию метакласса. В случае Class и Object были бы следующие вызовы:
const void * Object = new(Class, "Object", Object, sizeof(struct Object), ctor, Object_ctor, dtor, Object_dtor, differ, Object_differ, puto, Object_puto, 0);
const void * Class = new(Class, "Class", Object, sizeof(struct Class), ctor, Class_ctor, dtor, Class_dtor, 0);
К сожалению, все вызовы полагаются на то, что другой уже были завершён. Таким образом, реализация Class и Object в Object.c требует статической инициализации описаний классов. Это единственная точка, где мы явно инициализируем struct Class:
static const struct Class object [] = { { { object + 1 }, "Object", object, sizeof(struct Object), Object_ctor, Object_dtor, Object_differ, Object_puto }, { { object + 1 }, "Class", object, sizeof(struct Class), Class_ctor, Class_dtor, Object_differ, Object_puto } };
const void * Object = object; const void * Class = object + 1;
Имя массива является адресом первого элемента массива и уже может использоваться для инициализации компонентов элементов. Мы полностью расставили скобки этой инициализации на случай изменения struct Object позже.
|
Предыдущая Содержание Следующая |