Статья: Модуль для работы с ассоциативными массивами в C++ Builder

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

Это могло бы выглядеть так:

bool savePreferences(ass_arr* pref)

{

int i;

Variant v;

// цикл по всем элементам

for (i = 0; i < pref->Count(); i++)

{

// извлекаем очередной элемент

v = (*pref)[pref->key(i)].v()

// если элемент числового типа,

// сохраняем его числовое значение

if (VarType(v) == varInteger)

{

saveInteger((*pref)[pref->key(i)].asInteger());

}

// далее для других типов

...

}

}

Как быть, если нужно заполнить данными настроек Builder'овскую форму? Потребуется ещё одна функция. При использовании ассоциативных массивов эту процедуру можно автоматизировать.

А главное: при добавлении в массив настроек нового поля – не нужно ничего менять.

Существует ещё много подобных задач. Ассоциативные массивы – универсальное средство. Но как реализовать их в C++?

Реализация ассоциативных массивов в C++ Builder

Для реализации класса ассоциативного массива, я использовал несколько стандартных классов: во-первых, Variant – мультитип. В переменной типа Variant может хранится значение любого из стандартных типов. Во-вторых, CList – для создания внутренних списков. Поэтому, вне Builder'а – например, в MSVC++, этот класс работать не будет. Однако, при большом желании, его можно портировать (использовав list из stl и написав свою реализацию Variant).

Моя библиотека содержит три класса: ass_arrEl – класс элемента массива, ass_arr – класс простого ассоциативного массива, и его наследник – prop_ass_arr, предназначенный для работы с окнами настройки. Он «умеет» сохранять и загружать своё содержимое из реестра, заполнять им формы и заполняться содержимым формы сам.

Как работать с моими классами

Несколько наглядных примеров:

Простой массив. Работа со значениями.

К-во Просмотров: 228
Бесплатно скачать Статья: Модуль для работы с ассоциативными массивами в C++ Builder