Десериализую граф объектов (которые object).
Некоторые из них имеют VMT. При этом очень не хотелось бы заводить пустые конструкторы только затем, чтобы выставить VMT.
TypeOf возвращает не тот же указатель, что хранится в экземплярах, но близкий — смещение меняется в зависимости от размера VMT.
Как выставить VMT, зная TypeOf?! ;_;
Выставить VMT руками
Модератор: Модераторы
>>При этом очень не хотелось бы заводить пустые конструкторы только затем, чтобы выставить VMT.
А я наоборот не захотел возиться с VMT руками и специально для этого завел пустой конструктор))
А я наоборот не захотел возиться с VMT руками и специально для этого завел пустой конструктор))
В итоге так и сделал.
runewalsh писал(а):Некоторые из них имеют VMT. При этом очень не хотелось бы заводить пустые конструкторы только затем, чтобы выставить VMT.
Что за странная практика программирования, когда хочется использовать технологии в противоречии с идеологией. Не хотите иметь конструкторов, не имейте классов (объектов). Если нужно динамическое создание объектов при десериализации иерархии объектов с учетом наследования, то создавайте виртуальные функции возвращающие либо тип, либо создающие новый объект.
alexey38 писал(а):использовать технологии в противоречии с идеологией
Всё равно десериализация в неуправляемых языках была, есть и будет костылём, это нормально.
alexey38 писал(а):то создавайте виртуальные функции возвращающие либо тип
Для object'ов есть только TypeOf — по-видимому, бесполезный. И я не уточнил, что десериализовывать могу не только object'ы некой иерархии, а вообще произвольные типы, даже POD (идентифицируя тип чем-нибудь ещё — строкой или тоже указателем с пометкой, что это ни разу не TypeOf) — частный случай с VMT хотелось бы единожды разрулить в недрах Deserializer.Deserialize, а не гордо светить пустые конструкторы неинтуитивного назначения.
alexey38 писал(а):либо создающие новый объект.
Объект может быть сконструирован "in-place" — непосредственно в данных другого объекта, массиве, etc.
>>а не гордо светить пустые конструкторы неинтуитивного назначения.
Зачем городить? Один раз в базовом обжекте определить пустой конструктор - он унаследуется наследниками. Или базового класса нет?
Зачем городить? Один раз в базовом обжекте определить пустой конструктор - он унаследуется наследниками. Или базового класса нет?
zub писал(а):Один раз в базовом обжекте определить пустой конструктор - он унаследуется наследниками.
И правда ведь. Проверял это, но забыл по ходу. ^^"
