Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
2-1152861800
VitalZ
2006-07-14 11:23
2006.08.06
Есть ли описание NativeApi на русском языке


1-1151056210
Dok
2006-06-23 13:50
2006.08.06
Как создать комобьект типа IStream?


15-1151995532
Greka
2006-07-04 10:45
2006.08.06
Посоветуйте конфигурацию компьютера


2-1152785917
Layner
2006-07-13 14:18
2006.08.06
Как восстановить программу зная ее THandle, из другой программы?


15-1152509587
Ega23
2006-07-10 09:33
2006.08.06
С Днём рождения! 9 июля




   Наверх