Hi, Am Freitag, den 04.11.2005, 19:33 +0100 schrieb Peter Vreman: > At 18:17 4-11-2005, you wrote: > >This is evaluated by the pre-compiler run during compile time. > > > >When you use the template with e.g. > >var > >bl: List<String>; > > > >then procedure show(s:string) is taken. > > > > But what if the bl: List<String> is called from an other unit? The > Show(string) is then not visible anymore?
Put the Show(string) into the ppu too, with a mangled name, and save any calls of Show within the generic type implementation to the ppu, writing the mangled name. Excuse the stupid made-up example below, but I can't think of anything that really _needs_ global functions right now, so I cheated by using class functions and a global catch-all variable to require a global translation function: unit ubaz; interface type TCache = generic(T: TObject) class(TObject) published class procedure Put(Name: string; Instance: T); class function Get(Name: string): T; end; implementation var gCachedObjects: array of TObject; gCachedNames: array of string; function FooToBar(Name: string; Instance: TObject): string; begin Result := T.ClassName + '_' + Name; end; class procedure TCache.Put(Name: string; Instance: T); begin SetLength(gCachedObjects, Length(gCachedObjects) + 1); SetLength(gCachedNames, Length(gCachedNames) + 1); gCachedObjects[High(gCachedObjects)] := Instance; gCachedNames[High(gCachedNames)] := FooToBar(Name, Instance); end; class function TCache.Get(Name: string): T; var i: Integer; begin Result := nil; for i := 0 to High(gCachedNames) do begin if gCachedNames[i] = Name then begin if gCachedObjects[i] is T then begin Result := gCachedObjects[i]; end; Break; end; end; end; end. the generated ppu should have $Private$FooToBar$string$TObject: function ($2843423) and the generic parts: .... gCachedNames[High(gCachedNames)] := uBaz.$Private$FooToBar(Name, Instance); Or did I miss something important ? (apart from the act of auto-publishing of the function although it is not in the interface section being a bit evil) cheers, Danny [...] _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel