Форум: "Основная";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизПеременная содержащая тип Найти похожие ветки
← →
dust © (2005-12-29 12:11) [0]Хочу передавать в конструктор тип.
Если точнее -
Result := typed(ptmp^); где typed - член класса
Существуют ли вообще в делфи переменные, которые могут хранить тип?
Может быть существует другой подход к этому вопросу?
← →
Игорь Шевченко © (2005-12-29 12:15) [1]Переменные существуют, но непонятно, чего ты хочешь. Подробности давай.
← →
Digitman © (2005-12-29 12:15) [2]
> Result := typed(ptmp^); где typed - член класса
если typed - это действительно идентификатор некоего члена некоего класса, то такой код компилятор просто обязан отправить фтопку.
в противном случае typed у тебя есть идентификатор некоего типа, но никак не идентификатор члена класса.
← →
Rouse_ © (2005-12-29 12:19) [3]Ну к примеру вот так:
TGSBookmarkItem = class(TCollectionItem);
TGSBookmarkCollection = class(TOwnedCollection)
public
constructor Create(AOwner: TPersistent);
end;
TGSBookmarkList = class(TCustomControl)
private
FItems: TGSBookmarkCollection;
protected
function GetItemsClass: TCollectionItemClass; virtual;
end;
implementation
constructor TGSBookmarkCollection.Create(AOwner: TPersistent);
begin
inherited Create(AOwner, TGSBookmarkList(AOwner).GetItemsClass);
end;
function TGSBookmarkList.GetItemsClass: TCollectionItemClass;
begin
Result := TGSBookmarkItem;
end;
← →
Anatoly Podgoretsky © (2005-12-29 12:21) [4]dust © (29.12.05 12:11)
Тоже самое, но по русски
← →
dust © (2005-12-29 12:29) [5]Собственно я пишу контейнер, у которого есть методы GetCurrent(), procedure Append (const item); procedure AddFirst (const item);
так вот, я хочу, чтобы можно было написать:
Variable := Conteiner.GetCurrent();
но, существует одно "но " я не знаю как кого типа элементы будут в контейнере, а каждый раз приводить к AnyType не хочется
Variable := AnyType(Conteiner.GetCurrent());
← →
Digitman © (2005-12-29 12:30) [6]ну а причем здесь "поле класса" ?
← →
DesWind © (2005-12-29 12:30) [7]
type
TTGSBookmarkItemClass = class of TGSBookmarkItem;
← →
dust © (2005-12-29 12:44) [8]т.е. вы предлагаете, перед использованием контейнера задавать ему тип объектов - не годится, потому как один и тот же контейнер (класс контейнера) я собираюсь использвать для различных обектов в одном модуле
← →
dust © (2005-12-29 12:45) [9]а объявить функцию, которая будет возвращать неопределённый тип можно?
← →
Rouse_ © (2005-12-29 12:47) [10]
> а объявить функцию, которая будет возвращать неопределённый
> тип можно?
Нет, базовый класс должен быть обьявлен... Передавать можно производные от него.
← →
Игорь Шевченко © (2005-12-29 12:54) [11]
> а объявить функцию, которая будет возвращать неопределённый
> тип можно?
TObject - чем плохо
← →
Digitman © (2005-12-29 12:54) [12]см. TObject.ClassType
← →
evvcom © (2005-12-29 16:05) [13]
> которая будет возвращать неопределённый тип можно?
Нельзя. Функция не умеет возвращать типы вообще, она может возвращать только значения. Вот значение может быть неопределенного типа. Обычно в этом случае функция возвращает просто указатель на переменную неопределенного типа, т.е.function MyFunction: Pointer;
← →
Tesla (2005-12-29 16:31) [14]Что-то мне говорит о том, что автору поста нужен аналог С-шных шаблонов...
← →
tesseract © (2005-12-29 22:38) [15]
> а объявить функцию, которая будет возвращать неопределённый тип можно?
Можно. Как и в процедуре, через ссылку.
function returnsmth(var untypedvar):integer
Передача untypedvar идёт по ссылке, Используй его в качестве result.
Можно также выяснить класс объекта (спасибо RTTI)
if untypedvar is TmyClass then {}
← →
evvcom © (2005-12-30 09:46) [16]
> Можно. Как и в процедуре, через ссылку.
Вообще-то фраза "функцию, которая будет возвращать" подразумевает под собой возврат значения именно как результат функции, т.е. как Result := Value;
Еще раз повторю, что даже в этом случае в переменной var untypedvar возвращается не тип, а значение неопределенного типа. Это разные понятия.
> Можно также выяснить класс объекта
Можно, если передан действительно объект, что совсем необязательно.
← →
tesseract © (2005-12-30 10:05) [17]Надо заниматься полиморфизмом. Число возможных данных не может быть бесконечным.
Да и чем тебе Tlist/TObjectList не нравятся?
> Можно, если передан действительно объект, что совсем необязательно.
Вроде dust про объекты и говорит.
← →
evvcom © (2005-12-30 10:42) [18]
> Вроде dust про объекты и говорит.
Да, вроде действительно. Тогда тип TObject и нефиг нам парить мозги.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c