Re: Delphi кодогенерация - препроцессор
От: Danchik Украина  
Дата: 24.07.06 14:27
Оценка:
Здравствуйте, mr_dino, Вы писали:

_>Есть идея макросы добавить в Delphi.


[Skip]

_>Такое можно было бы за 3-4 дня написать. Но, подумалось, возможно, есть что-то готовое. Или есть альтернативы.

_>Кто-нибудь видел подобное?

Это конечно хорошо, но думаю перегенерация буде занимать много времени. Тоесть постоянная генерация и компиляция отдельных юнитов.

Мне больше нравится подход с Code Template. Тоесть создаем шаблон и натравливаем его на новый или уже существующий класс и получаем код. Конечно это не так гибко как с препроцессором, но по крайней мере более native к Delphi.

Очень неплохо с даной задачей справлятся ModelMaker CodeExplorer.
Вот пример шаблона, который двумя кликами натравлятся на класс:
unit _MM_TypedList;

interface

//DEFINEMACRO:ItemType=Item Type

type
  TCodeTemplate = class(TObject)
  private
    FItems: TList;
    function GetCount: Integer;
    function GetItems(Index: Integer): <!ItemType!>;
  public
    constructor Create;
    destructor Destroy; override;
    function Add(Item : <!ItemType!>): Integer;
    procedure Delete(Index : Integer);
    procedure Remove(Item : <!ItemType!>);
    property Count: Integer read GetCount;
    property Items[Index: Integer]: <!ItemType!> read GetItems; default;
  end;


implementation

constructor TCodeTemplate.Create;
begin
  inherited Create;
  FItems := TList.Create;
end;

destructor TCodeTemplate.Destroy;
begin
  TListUtils.EmptyClasses (FItems);
  FItems.Free;
  inherited;
end;

function TCodeTemplate.Add(Item : <!ItemType!>): Integer;
begin
  FItems.Add (Item);
end;

procedure TCodeTemplate.Delete(Index: Integer);
begin
  FItems.Delete (Index);
end;

function TCodeTemplate.GetCount: Integer;
begin
  Result := FItems.Count;
end;

function TCodeTemplate.GetItems(Index: Integer): <!ItemType!>;
begin
  Result := FItems [Index];
end;

procedure TCodeTemplate.Remove(Item : <!ItemType!>);
begin
  FItems.Remove (Item);
end;
end.


Кстати создаются эти шаблоны с полпинка, просто отмечаем нужных членов класса и говорим что нужно сгенерить шаблон. Ну и как бонус эксперт добавляет куда нужно uses — он просто помнит в каких юнитах что валяется.

Пока этот подход меня вполне устраивает...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.