On 25/11/2011 07:50, Dimitri Smits wrote:
so you have:
====
type
   TMyObject=class(TObject)
    ...
    constructor Create;
   end;


Yes

   TMyClass = class of TMyObject; //<-- important I guess


Not important or necessary. I was using TClass from RTL = class of TObject

...

procedure processSomething(AClass: TClass);
var
   someInstance: TObject;
begin
   someInstance := AClass.Create(); //<-- always the one from TClass/TObject?
end;


Yes

...
begin
   processSomething(TMyObject);
end;

====

class methods (and the constructors and destructor) are in Delphi part of the 
TClass memorystructure. I believe even the TObject default Create. For your 
trick to work, you need one of 2 things:
- declare the class-reference for a type explicitly (class of T...)
- make a virtual constructor in a subtype of TObject and declare a 
class-reference. Then you derive from that subtype.

I know all of this. I even already use this approach in one of my libraries where i have a base class and a reference to class of this type.

What i needed this time was more generic: the ability to instantiate any TObject without the need to change interface of the classes

I don't think (did not test) it finds a TMyClass in Delphi as well if you do 
not declare the type, so in effect it always takes TClass. The other scenario's 
I've used before in classfactory pattern before.

It has nothing and everything to do with RTTI. No, the new D2010+ RTTI does not 
give access to the default constructor (I think),

Yes, it does see example at http://code.google.com/p/emballo/source/browse/trunk/Src/Emballo.DI.Instantiator.pas#152

Anyway, i already found a solution, so there's no fuzz in my part

Luiz
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to