Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

set в свойстве object TStringList а   Найти похожие ветки 

 
alsov ©   (2006-07-13 16:27) [0]

Приветствую, Мастера

Вот какой вопрос. Хочу в стринглисте для каждой строки хранить некое множество. Скажем

 TAccessType = (atSelect, atUpdate, atInsert, atDelete);
 TAccessTypes = set of TAccessType;


Простым приобразованием типов делфя не хочет запихивать множество - ругается


AccessTypes := [atSelect, atUpdate];
FList.AddObject("TEST", TObject(AccessType));


Описал следующий тип


 TAccessTypesEx = record
   case byte of
   0: (AccessTypes: TAccessTypes);
   1: (IntAccessType: integer);
 end;


Тогда все компилируется на ура


AccessTypesEx.AccessTypes := [atSelect, atUpdate];
FList.AddObject("TEST", TObject(AccessTypesEx.AccessType));


Причем чтение тоже проходит нормально.

НО все-таки смущения остается!!! Всегда ли такой вариант отработает на ура? Не будет ли непредвиденных глюков с памятью?
И вообще хотелось бы услышать ваше мнение по поводу правильности подхода

Заранее благодарен за любую помощь


 
Джо ©   (2006-07-13 16:33) [1]

А не лучше ли здесь создать свой класс, в который агрегировать два класса TStringList и TList (для хранения TAccessTypes)?


 
Джо ©   (2006-07-13 16:34) [2]

после слова "два класса" — двоеточие.


 
alsov ©   (2006-07-13 16:36) [3]

А в TList множества хранить можно?


 
begin...end ©   (2006-07-13 16:39) [4]

> alsov ©   (13.07.06 16:27) [0]

> Простым приобразованием типов делфя не хочет запихивать
> множество - ругается

Значит, придётся использовать непростое приведение:

FList.AddObject("TEST", TObject(Byte(AccessTypes)))
> Всегда ли такой вариант отработает на ура?
Лично я так вот сразу проблем не вижу. Множество, базовый тип которого имеет мощность 4, занимает в 1 байт. Поэтому в 4 байта (TObject) оно всяко поместится.


 
Джо ©   (2006-07-13 16:39) [5]

> [3] alsov ©   (13.07.06 16:36)
> А в TList множества хранить можно?

TList предназначен для хранения указателей. А указатель может быть на PAccessType = ^TAccessType ;)


 
alsov ©   (2006-07-13 16:52) [6]

begin...end

Спасибо - помогло.

Пробовал FList.AddObject("TEST", TObject(integer(AccessTypes))) - не получалось, а вот то что множество это байт - забыл (а моет и не знал :) )



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
4-1145254631
Brother
2006-04-17 10:17
2006.08.06
Иконки рабочего стола


1-1150393322
Urvin
2006-06-15 21:42
2006.08.06
Цвет выделения в ListView


3-1149150236
Dust
2006-06-01 12:23
2006.08.06
Абра-кадабра в отчёте, FR, Arial (cp Cyrilic), WinXP Rus


1-1150904746
NORDmen
2006-06-21 19:45
2006.08.06
регулярные выражения разбор строк


15-1152613746
SoftService
2006-07-11 14:29
2006.08.06
J2ME compiler