Главная страница
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.073 c
15-1152509587
Ega23
2006-07-10 09:33
2006.08.06
С Днём рождения! 9 июля


3-1148968666
Still Swamp
2006-05-30 09:57
2006.08.06
Как до FireBird добраться через ADO?


3-1149163023
Hadroran
2006-06-01 15:57
2006.08.06
Динамические LookUp поля


3-1148922995
Katyyha
2006-05-29 21:16
2006.08.06
Курсач


2-1153131002
Квэнди
2006-07-17 14:10
2006.08.06
Преобразование даты в Posix формат