![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)?