Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
2-1137783564
Antip
2006-01-20 21:59
2006.02.05
Непонятка с указателями и списком TList


2-1137512430
Virtukon
2006-01-17 18:40
2006.02.05
Ускорение процесса добавления текста в TStrings


3-1133968242
Morik
2005-12-07 18:10
2006.02.05
формат даных Blob-поля


8-1124878808
Irinka
2005-08-24 14:20
2006.02.05
Обновить рабочий стол


1-1135694937
hgd
2005-12-27 17:48
2006.02.05
Скачать картинку и вывести в Image





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский