Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

set в свойстве object TStringList'а [D7]


alsov ©   (2006-07-13 16:27:00) 

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

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

 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));


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

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

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


alsov   (2006-07-13 16:52:00) [1]

begin...end

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

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


begin...end   (2006-07-13 16:39:00) [2]

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

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

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

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


Джо   (2006-07-13 16:39:00) [3]

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

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


alsov   (2006-07-13 16:36:00) [4]

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


Джо   (2006-07-13 16:34:00) [5]

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


Джо   (2006-07-13 16:33:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо