2016-11-03 3 views
1

У меня есть много классов, скажем,Дизайн вопрос о сериализации, десериализации

class A 
{ 
/*member variables*/ 
}; 

class B .. Class Z 

Я копирование объектов этих классов в буферную (символ *). Теперь у меня есть объект-читатель, который непрерывно обследует этот буфер и десериализует байты в объекты и печатает их. Мой вопрос заключается в том, как должен быть разработан класс десеризатора.

Подход, который у меня есть, заключается в том, чтобы вставить тип объекта в виде заголовка, а затем отправить его через буфер. После чтения буфера я знаю тип, а затем я могу десериализовать соответствующий объект. Проблема с десериализирующей частью теперь заключается в том, что она должна знать все типы сообщений и вызывать соответствующую функцию на основе типа. Я планирую эту десериализацию как отдельный объект, который не знает о типах сообщений или код для десериализации, он не должен быть его частью.

Я ищу решения, такие как интерфейсы, полиморфизм и т. Д., Чтобы решить эту проблему. Есть ли шаблон дизайна для такого рода проблем?

+0

возможно это: http://www.boost.org/doc/libs/1_62_0/libs/serialization/doc/index.html будет полезно для вас (boost :: serialization);) –

+0

Также изучите, нужно сделать это самостоятельно. Проверьте https://developers.google.com/protocol-buffers/, https://thrift.apache.org/ или https://avro.apache.org/. – PsiX

ответ

0

Первый вопрос, читатель и писатель на одной и той же переводческой единице?

Если да, то вы можете иметь полиморфные классы. Базовый класс Message и производные классы от него. Читатель считывает буфер как Message*, а затем вызывает переопределенные виртуальные функции для получения требуемой информации о производном классе.

Если нет, то вы можете вводить коды типа-к-int в сообщение.

Смежные вопросы