Здравствуйте, 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 — он просто помнит в каких юнитах что валяется.
Пока этот подход меня вполне устраивает...