Кто-нибудь знает о "уровне языкового уровня" для травления в С++? Я не хочу что-то вроде сериализации Boost или буферов протокола Google. Вместо этого, что-то, что может автоматически сериализовать всех членов класса (с возможностью исключения некоторых членов, либо потому, что они не являются сериализуемыми, либо потому, что я просто не хочу их сохранять позже). Это может быть выполнено с дополнительным действием во время разбора, которое создаст код для обработки автоматической сериализации. Кто-нибудь слышал об этом?
Пилинг в стиле пика для С++?
Ответ 1
Я не верю, что есть какой-либо способ сделать это на языке без возможности интроспекции времени выполнения.
Ответ 2
возможно, XML-привязка данных? gsoap является лишь одним из многих вариантов. Вы можете автоматически генерировать код для сопоставления между структурой данных и схемой xml. Не уверен, что настройка этого будет проще, чем другие варианты, которые вы упоминаете.
Ответ 3
то, что может автоматически сериализуйте все члены класса
Это невозможно в С++. Python, С#, Java et al. для достижения этой цели используйте интроспекцию времени выполнения. Вы не можете сделать это на С++, RTTI недостаточно мощный.
По сути, на языке С++ нет ничего, что позволило бы кому-либо обнаружить переменные-члены объекта во время выполнения. Без этого вы не можете автоматически их сериализовать.
Ответ 4
Там стандартная сериализация С++ с < и → , хотя вам придется реализовать их для каждого из ваших классов (что похоже на то, что вы не хотите делать). Некоторые практикующие говорят, что вы всегда должны реализовывать этих операторов, хотя, конечно, большинство из нас редко это делают.
Ответ 5
Один из быстрых способов сделать это, что я получил работу один раз, когда мне нужно было сохранить структуру в файл, было приведение моей структуры в массив char
и запись ее в файл. Затем, когда я захотел снова загрузить свою структуру, я бы прочитал весь файл (в двоичном режиме) и передал все это в свой тип структуры. Это достаточно просто и использует тот факт, что структуры хранятся как непрерывный блок в памяти. Я бы не ожидал, что это будет работать со свернутыми структурами данных или указателями, но это пища для размышлений.