Создание класса по его имени

Объекты Pascal, классы Object Pascal, интерфейсы, наследование, инкапсуляция и т.д
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

06 май 2006, 12:28

типы в run-time описывать нельзя
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

06 май 2006, 12:39

можно создавать (как это делает, например TCollection) тип класса и указывать его.
например:

Код: Выделить всё

type
  TObjectClass = class of TObject;
и в коде создавать уже его.

Код: Выделить всё

function CreateComeClass(AClass: TObjectClass): TObject;
begin
  Result := AClass.Create;
end;
пример использования:

Код: Выделить всё

Generate := CreateComeClass(TGenerate);
С уважением, Lost Angel...
vitek1
Сообщения: 6
Зарегистрирован: 05 май 2006, 19:59
Контактная информация:

06 май 2006, 14:53

2 Blod_Magic
Я бы не стал так котигорично утверждать о невозможности создания класса динамически. Если покопаться в структуре VMT, то все может быть. И если класс создать все же не получиться, то скорее всего возможно изменить через VMT заготовленное заранее описание
TMyClass = class(TObject) end;
до неузнаваемости, добавив ему необходимые поля и методы
vunder
Сообщения: 74
Зарегистрирован: 10 май 2006, 12:19
Откуда: Санкт-Петербург
Контактная информация:

10 май 2006, 12:27

RegisterClass регистрирует любой класс, необязательно визуальный.
Для получения класса советую использовать GetClass, а не FindClass, т.к. если не находит класс с таким именем, то возвращает nil, а FindClass генерирует исключение.
Я так делал в своей программе: и классы объекстов и списковые классы являлись наследниками от одного объекта. Потом объявлял TMyClass = class of TMyObject и еще писал функцию проверяющую, является ли данный данный класс наследником от другого
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

26 окт 2009, 09:53

&quot писал(а):типы в run-time описывать нельзя
Ты загрузил транслятор, описал тип и запустил процесс трансляции. Тип создан, но для транслятора это рантайм. Или ты имеешь ввиду, что прилада не может создавать новые типы в рантайм? Запихай в неё транслятор с каким нибудь метатипом - сможет.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
&quot писал(а):разрабатываю язык GPSS
А если разрабатывается язык, то причём здесь вообще прилады и ограничения на создание типа в рантайме? Уж если язык, то значит транслятор, а транслятор должен создавать типы именно в рантайме. Возможно даже только в рантайме.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответить