Я собираюсь попытаться ответить на суть вопроса здесь.Я думаю, что вы тоже можете довольствоваться Boost Serialization?
Boost serialization - очень мощная универсальная библиотека сериализации, способная сериализовать в
- обычный текст
- XML
- двоичные архивы
Он поставляется с полной поддержкой широкого спектра типов данных 1 - но не для указателей на функции из коробки.Однако из-за своей расширяемой природы Петр Димов предложил способ сериализации функций по имени, регистрации функций вручную.В эскизе это будет выглядеть следующим образом:
template<class T> void register_static( T * pt, std::string const & name )
{
// add to name<->address maps
}
template<class T> void save(T * const & pt)
{
// look up the name of pt and save
}
template<class T> void load(T * & t)
{
// load name, look up address, store in pt
}
Обратите внимание, что T может быть любого вызываемого типа
- тип функции
- указатель функции
- функциональный объект (например,
std::less()
) - лямбда-выражение
Важно, однако, зарегистрировать каждый экземпляр вызываемого типа по имени,поскольку адреса не были бы сэмом для отдельных экземпляров.
1 стандартные контейнеры, указатели, структуры данных с внутренними (указательными) ссылками, псевдонимы-указатели, циклическиедеревья и т. д.