Встал недавно передо мной такой вопрос:
Есть карта CAtlMap и массив CAtlArray. Нужно упаковать/распаковать их содержимое для хранения/передачи по сети.
Под упаковкой понимается запись содержимого контейнера в память. Распаковка — это создание контейнера из памяти.
Не буду вдаваться в детали реализации упаковки/распаковки данных, для данного вопроса это неважно. Вместо сериализации может быть например, экспорт/импорт данных.
Хотелось бы написать один классс который бы мог обрабатывать разные типы конткейнеров (карту, массив, возможно список).
Вот прототип:
template < class C >
class CSerializer
{
С& m_rc; // контейнер (карта или массив)
public:
CSerializer(С& rc): m_rc(rc){};
DWORD GetSerializedSize() const;
HRESULT Serialize(PBYTE pbData, PDWORD pcbProcessed) const;
HRESULT Deserialize(const PBYTE pbData, PDWORD pcbProcessed);
};
Предполагается что каждый элемент контейнера также будет иметь методы Serialize и Deserialize и CSerializer будет просто использовать их переберирая все элементы контейнера. Однако проблема в том, что работы с контейнерами отличается. Например элементков карты — два компонента ключ и значение, а у массива один (индекс не рассматриваем).
Вот и вопрос, как бы обощить работу с этими коллекциями данных?
28.02.13 20:57: Перенесено модератором из 'C/C++' — Кодт