Если нужна очень легкая сериализация без библиотек. В самом простом случае можно вручную каждое поле привести к бинарному виду и восстановить. Но это много ручной работы. Рефлексию не подвезли.
Можно весь объект привести к бинарному виду, но тут много проблем — даже если добавить логику работы с указателями, то есть проблема разного бинарного представления типов в памяти (выравнивание).
есть, нанять программист который это сделает за тебя
зы
анекдот
когда бог захотел создать идеальный язык программирования он создал Страуструпа а тот создал С++
когда бог понял что программировать на С++ стало слишком просто, он создал Шмыгу и тот начал генерить бредовопросы на форуме
Здравствуйте, Shmj, Вы писали:
S>Больше интересует есть ли хотя бы какой-то способ, чтобы не писать вручную имя каждого поля.
Используйте генераторы кода, что бы не писать вручную
Здравствуйте, Нomunculus, Вы писали:
Н>Не надо так делать. Save/Load должны быть в самой структуре и принимать на вход абстрактный сериализатор. А вот уже его реализуешь как хочешь
Просто у меня около 40 наследников и все из нужно сериализовать/десериализовать бинарно. Даже если в каждый добавить 2 метода, по 5 минут на метод — уйдет — 10*40=400 минут, т.е. считай целый день.
Вроде можно добавить alignas(1) каждому и тогда вроде бинарный код будет без отступов, одинаковым на всех системах. Порядок байт на всех компьютерах мира остался только LittleEndian — BigEndian на планете уже считай нету.
Не понял задачу. Ты пишешь код, генерящий код?
Я к тому что не обязательно ООП везде тянуть. Не, зачастую конечно надо, но иногда можно и enum-ом обойтись. Ну это конечно задачу смотреть надо.
Здравствуйте, Нomunculus, Вы писали:
Н>Не понял задачу. Ты пишешь код, генерящий код? Н>Я к тому что не обязательно ООП везде тянуть. Не, зачастую конечно надо, но иногда можно и enum-ом обойтись. Ну это конечно задачу смотреть надо.
Ну да, дерево AST для JS в виде JSON. По нему создается дерево объектов C++ — для каждой инструкции свой класс. Без объектов будет весьма не удобно.
Здравствуйте, Нomunculus, Вы писали:
Н>Тут наверное лучше опять-таки не наследование, а шаблонный класс. Н>Ну, конечно, надо детальнее знать. Может, и нет
Так а какие вам детали? Каждая инструкция JS имеет разное количество и порядок вложенных инструкций. К примеру if/else — имеет инструкцию для вычисления условия (то что внутри скобочек if), тело if и опционально тело else. Зачем тут шаблоны?
Здравствуйте, Shmj, Вы писали:
Н>>Не надо так делать. Save/Load должны быть в самой структуре и принимать на вход абстрактный сериализатор. А вот уже его реализуешь как хочешь S>Просто у меня около 40 наследников и все из нужно сериализовать/десериализовать бинарно. Даже если в каждый добавить 2 метода, по 5 минут на метод — уйдет — 10*40=400 минут, т.е. считай целый день.
Всего-то день.
S>Вроде можно добавить alignas(1) каждому и тогда вроде бинарный код будет без отступов, одинаковым на всех системах. Порядок байт на всех компьютерах мира остался только LittleEndian — BigEndian на планете уже считай нету.
Не о том думаете. Подумайте лучше, что будет когда вы поменяете в одной из структур два поля местами или тип одного из поля.
Здравствуйте, B0FEE664, Вы писали:
S>>Вроде можно добавить alignas(1) каждому и тогда вроде бинарный код будет без отступов, одинаковым на всех системах. Порядок байт на всех компьютерах мира остался только LittleEndian — BigEndian на планете уже считай нету. BFE>Не о том думаете. Подумайте лучше, что будет когда вы поменяете в одной из структур два поля местами или тип одного из поля.
Это чисто для внутреннего использования, если поменяется структура — сразу же поменяются и инициализирующие данные — не проблема.
Тут беда в том что есть векторы у которых указан тип базовый класс, а вмещают они наследников через умный указатель. Боюсь что это бинарной сериализацией никак не разрулить.