On 18 May 2010 10:12, Florian Klaempfl wrote: > > - it is one of the basic programming principles: if a result is returned > by a subroutine, use a function
The function might return a boolean (success/fail), or an error code etc.. The function result doesn't need to return the new instance created by the factory method. Anyway, I knocked up a very basic Factory Method example, and I fear (it pains me dearly <wink>) to say that you are correct in this example. :) Normal usage of a Factory Method will pass in a base class, which will actually match the signature of the Factory Method. But getting back to may original issue about TfpgApplication.CreateForm(), this works very different to a Factor Method and the usage is not deemed "unsafe". fpgApplication.CreateForm(TMyForm, MyForm); But I guess the only solution (forced upon me now) is to use some magic code like LCL does. An untyped variable (YUCK!!! They are as bad as Variants!) and then type cast it inside the implementation of CreateForm and use the 'is' operator to find out if the instance really is a TfpgWindowBase descendant. A whole much of crap code that wasn't needed with FPC 2.4.1. Oh well. :-/ Anyway, to show that I can admit I was wrong.... Here is an example to show that Factory Method can be implemented without problems using latest FPC 2.5.1 ---------------------------- type TBaseReport = class(TObject) public procedure Run; virtual; abstract; end; TReportA = class(TBaseReport) public procedure Run; override; end; TReportB = class(TBaseReport) public procedure Run; override; end; TReportClass = class of TBaseReport; TFactory = class(TObject) public procedure RegisterReport(const AName: string; AClass: TReportClass); function CreateReport(const AName: string; out ARpt: TBaseReport): Boolean; end; // singleton of TFactory function gFactory: TFactory; ... and then when used... var rpt: TBaseReport; ok: Boolean; begin ok := gFactory.CreateReport('a', rpt); if ok then begin rpt.Run; rpt.Free; end; end; -- Regards, - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://opensoft.homeip.net/fpgui/ _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel