У меня следующая ситуация (упрощенно):
ах:
#include <boost/serialisation/serialisation.hpp>
class B;
using namespace std; using namespace boost;
class A {
B *b;
template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & b; }
};
чч:
#include <boost/serialisation/serialisation.hpp>
class C;
using namespace std; using namespace boost;
class B {
C *c;
template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & c; }
};
ч:
#include <boost/serialisation/serialisation.hpp>
using namespace std; using namespace boost;
class C {
int somevar;
template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & somevar; }
};
main.cxx:
#include <boost/archive/text_oarchive.hpp>
#include <fstream>
#include "a.h"
#include "b.h"
#include "c.h"
using namespace std; using namespace boost;
int main() {
A a; // Create the object
ofstream ofs("save");
archive::text_oarchive oa(ofs);
oa << a; // Save the object
return 0;
}
Теперь проблема в том, что мне нужно включить заголовочные файлы всех классов, которые я хочу сериализовать, в функцию сохранения (в данном случае прямо внутри main).Проблема в том, что существует более трех классов, и они намного сложнее, что приводит к узкому месту компиляции на этом этапе.
Я только недавно начал использовать сериализацию Boost, но я посмотрелпо документации и поиска в Google и здесь, так что я думаю, что я упустил что-то очевидное.
Есть ли у кого-нибудь решение для этого так, что нужно включить только "ах", а не "бх","ch" и т. д.
РЕДАКТИРОВАТЬ: Надеемся, что это важная часть ошибки компиляции, которая возникает, если я закомментирую строки #include "bh" и "ch":
main.cxx:17:1: instantiated from here
/usr/include/boost/type_traits/is_abstract.hpp:72:4: error: incomplete type ‘B’ not allowed