Мне кажется, я поняла, что вы хотите, но это невозможно.В настоящее время нет способа реализовать в C ++ универсальную потоковую передачу для всех классов.Требуется доступ к информации, такой как количество полей, которые имеет класс, их относительный адрес, а также тип во время компиляции.
В настоящее время они работают над добавлением этого в C ++ в течение многих лет, ищите Reflection TS.Насколько я знаю, он не будет готов к C ++ 20.
Однако вы можете организовать свой код так, чтобы каждый метод чтения / записи был легко реализован.Например:
class A : public B, public C
{
private:
vector<int> m_v;
int m_x;
};
Затем реализовать запись для него как
template<>
void write(const A& a)
{
write((const B&)a);
write((const C&)a);
write(a.m_v);
write(a.m_x);
}
В то время как для общих структур данных, таких как std::vector<T>
, реализовать запись через write<T>
.Это требует времени, но сделать его техническим, а использование перенаправлений может сэкономить много кода и времени.
(вам нужно сделать write
функцией-другом или функцией-членом, чтобы она могла получать доступ к закрытым членам)