Хочется странного... сделать автосоздание объектов-членов

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Хочется странного... сделать автосоздание объектов-членов

Сообщение NTFS » 03.07.2011 00:21:15

Хочется как-то реализовать возможность автоматического создания объектов в классе.

Например, есть класс
Код: Выделить всё
TMyClass1 = class
   List:TStringList ;
   C2:TMyClass2 ;
end ;


Нужно, чтобы после вызова:
Код: Выделить всё
  MC1 := TMyClass1.Create ;


объекты MC1.List и MC1.C2 уже содержали созданные экземпляры соответствующих классов.

Есть мысли, как это сделать правильно?

Дополнительно, было бы классно, чтобы они и удалялись после вызова MC1.Free
NTFS
постоялец
 
Сообщения: 388
Зарегистрирован: 05.11.2007 14:57:50
Откуда: Краснодар

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение carrots » 03.07.2011 03:51:34

переобявить оператор присвоения.
Код: Выделить всё
Operator := (r : TMyClass1) z : TMyClass1;
begin
  z := r;
  if not assigned(z.list) then z.list := tstringlist.create;
  if not assigned(z.C2) then z.C2 := TMyClass2.create;
end;

Также можно сделать чтоб работало вообще для всех классов не являющихся персистентом, тогда нужно переобявлять оператор присвоения для TObject и проверять после присвоения не является ли он TPersistent, затем найти в нем все TPersistent и создать их тем классом которым они являются (количество пропертей узнать можно, а вот переменных не знаю).

С освобождением(если не добавлять в клас destroy) можно поступить разными методами:
1. При создании объектов записывать их в какой-то список и освобождать на finalization.
2. Создать процедуру освобождения
Код: Выделить всё
Free(MC1)
которая будет искать все чилды и освобождать(если переменные найти не получится - их можно будет сразу где-то записать).


как альтернатива - можно написать препроцессор который будет добавлять в классы конструктор и дестрой.
Последний раз редактировалось carrots 03.07.2011 04:10:31, всего редактировалось 2 раз(а).
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение minoshi » 03.07.2011 03:56:19

не то ?

Код: Выделить всё
unit alsmplayer;
...

type tmplayer = class
private 
  ftimer   : ttimer;   //таймер
  fterm    : tterminal;  //терминал
  ....
public
  constructor create(const aowner: tobject = nil);
  ...
end;

implementation

constructor tmplayer.create(const aowner: tobject);
begin
fterm := tterminal.create(nil);
ftimer := ttimer.create(nil);
end;
....
end.
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение carrots » 03.07.2011 04:12:01

я так понял он не хочет constructor и destructor вписывать
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение Max Rusov » 03.07.2011 12:23:13

Можно сделать через RTTI, правда тогда придется объявить для полей published свойства. В конструкторе базового класса перебирать все published свойства и для объектных - создавать экземпляр. Ну и в деструкторе так-же.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение kipar » 03.07.2011 13:48:41

У RTTI есть ограничения - например массив автосоздающихся объектов таким образом не получится сделать.
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение svk12 » 03.07.2011 14:43:31

carrots писал(а):я так понял он не хочет constructor и destructor вписывать


Мне тоже так показалось.
Интересно, что плохого в перекрытии Create и Destroy с созданием/освобождением классов-полей?
svk12
постоялец
 
Сообщения: 408
Зарегистрирован: 09.06.2008 18:42:47

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение carrots » 03.07.2011 14:57:21

svk12 писал(а):
carrots писал(а):я так понял он не хочет constructor и destructor вписывать


Мне тоже так показалось.
Интересно, что плохого в перекрытии Create и Destroy с созданием/освобождением классов-полей?

Для удобства, чтоб лишние методы не описывать.
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Хочется странного... сделать автосоздание объектов-членов

Сообщение Brainenjii » 03.07.2011 16:01:26

Парсер и генератор кода надо, ИМХО...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru
cron