Травление в стиле Python для C ++? - PullRequest
11 голосов
/ 11 ноября 2010

Кто-нибудь знает о "языковом" средстве для засолки в C ++? Я не хочу что-то вроде сериализации Boost или буферов протокола Google. Вместо этого, что-то, что могло бы автоматически сериализовать всех членов класса (с возможностью исключения некоторых членов, либо потому, что они не сериализуемы, либо потому, что я просто не хочу сохранять их на потом). Это может быть достигнуто с помощью дополнительного действия во время синтаксического анализа, которое будет генерировать код для обработки автоматической сериализации. Кто-нибудь слышал что-нибудь подобное?

Ответы [ 5 ]

7 голосов
/ 11 ноября 2010

Я не верю, что есть какой-то способ сделать это на языке без возможностей самоанализа во время выполнения.

3 голосов
/ 11 ноября 2010

что-то, что может автоматически сериализовать всех членов класса

Это невозможно в C ++.Python, C #, Java и др.используйте для этого самоанализ во время выполнения.Вы не можете сделать это в C ++, RTTI недостаточно мощен.

По сути, в языке C ++ нет ничего, что позволяло бы кому-то обнаруживать переменные-члены объекта во время выполнения.Без этого вы не сможете автоматически их сериализовать.

3 голосов
/ 11 ноября 2010

возможно xml Привязка данных ? gsoap - это только один из многих вариантов. Вы можете автоматически генерировать код для сопоставления между структурой данных и XML-схемой. Не уверен, что настройка будет проще, чем другие опции, о которых вы упоминаете

1 голос
/ 11 ноября 2010

Существует стандартная C ++ сериализация с операторами << и >>, хотя вам придется реализовать их для каждого из ваших классов (что, как вам кажется, не нужно делать). Некоторые практикующие врачи говорят, что вы должны всегда внедрять эти операторы, хотя, конечно, большинство из нас редко делают это.

0 голосов
/ 11 ноября 2010

Одним из быстрых способов сделать это, которое я заработал однажды, когда мне нужно было сохранить структуру в файл, было преобразование моей структуры в массив char и запись ее в файл.Затем, когда я захотел загрузить свою структуру обратно, я прочитал весь файл (в двоичном режиме) и привел все это к типу моей структуры.Достаточно просто и использует тот факт, что структуры хранятся как непрерывный блок в памяти.Я не ожидал бы, что это будет работать со сложными структурами данных или указателями, но пища для размышлений.

...