Обработка стандартных контейнеров - вопрос по проектированию
От: Electrode http://voynex.com
Дата: 28.02.13 08:24
Оценка:
Встал недавно передо мной такой вопрос:
Есть карта 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++' — Кодт
++i--; // подергивание 8-))
c++ atl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.