(Для простоты, сериализатор будет называться записью и десериализатор будет называться чтения)C++ сериализатора с шаблоном и полиморфизмом
Я пишу C++ игры сериалайзер с нуля, без библиотеки допускается.
Основная проблема, которую я имею, заключается в том, чтобы сохранить синхронизацию чтения и записи (значения чтения должны быть такими же, как и записанные). Таким образом, Packer
обрабатывает обе задачи и указан с перечислением.
Что я имею
enum PackerType {
WRITE,
READ
}
template <PackerType PType>
class Packer {
char *buffer; // Packer will write here
uint32_t index;
template <typename T>
void Pack(T & value); // Calls appropriate functions depending on PType
}
Что я хочу быть в состоянии сделать
class ElementToSerialize : ISeriablizable {
virtual void WriteAndRead(Packer & p) {
p.Pack(32);
p.Pack("Hello World");
}
}
Packer<WRITE> wpacker;
Packer<READ> rpacker;
rpacker.buffer = wpacker.buffer;
WriteAndRead(wpacker); // Will write everything in wpacker.buffer
WriteAndRead(rpacker); // Will read wpacker.buffer
Так я знаю, что это не возможно в C++, но то, что я ищу элегантный способ решения этой проблемы. Я уже знаю о стирании стилей, но я не поклонник этого решения.
одно приемлемое решение: вы можете изменить 'WriteAndRead' в шаблон. –
Я не обязательно вижу необходимость использования шаблонов здесь, вы можете просто сохранить в члене объекта Packer ли это писатель или читатель и заставить его действовать соответственно во время выполнения. – Steeve
@appleapple, хотя он не указан в примере, эта функция должна быть виртуальной. Я добавлю его, чтобы быть яснее. – aguadoe