Вниз
Скачать: 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.041 c
2-1153383082
Pups
2006-07-20 12:11
2006.08.06
Подскажите по классам!!!


4-1145254631
Brother
2006-04-17 10:17
2006.08.06
Иконки рабочего стола


3-1148961704
ganda
2006-05-30 08:01
2006.08.06
Организация истории изменения таблицы


3-1148752070
Гарик
2006-05-27 21:47
2006.08.06
Динамическое создание БД


1-1150983408
yaJohn
2006-06-22 17:36
2006.08.06
Интерфейсы под Delphi 5




   Наверх