Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c