Это не совсем ответ, а просто хитрый обходной путь.
В базовый класс добавьте:
virtual void StreamToArchive(boost::archive::text_oarchive &oa) = 0;
, затем определите макрос STREAMTOARCHIVE и поместите его в каждый изпроизводные классы.
#define STREAMTOARCHIVE void StreamToArchive(boost::archive::text_oarchive &oa) { oa << *this; }
Затем в основном замените
oa << base;
на
base.StreamToArchive(oa);
Да, я знаю, это уродливо, но .. хорошо, это работаети мне просто нужно поместить этот макрос STREAMTOARCHIVE в производные классы ... Я могу жить с этим ...
Но потом ... чтобы разобрать его обратно в объект, теперь это другое дело ...
Отредактировано: изменено «это» на «* это»