Всякий раз, когда мне приходится сериализовывать объекты в программе на С++, я возвращаюсь к такому виду шаблонов:
class Serializable {
public:
static Serializable *deserialize(istream &is) {
int id;
is >> id;
switch(id) {
case EXAMPLE_ID:
return new ExampleClass(is);
//...
}
}
void serialize(ostream &os) {
os << getClassID();
serializeMe(os);
}
protected:
int getClassID()=0;
void serializeMe(ostream &os)=0;
};
Вышеприведенное работает на практике. Однако я слышал, что такой тип переключения идентификаторов классов - это зло и антипаттерн; что стандартный, OO-способ обработки сериализации в С++?