Am 24.11.2011 17:10, schrieb Juha Manninen:
Now, if I do:

   myV := TMyDerived.Create(False);
   if myV is TFPGObjectList then
     ...

it gives:
  unit1.pas(67,10) Error: Class or Object types "TMyDerived" and
"TFPGObjectList" are not related

In my opinion they are related.

Maybe generics are good only for situations where you don't need to
derive classes or test their inheritance.

They are not related. You should not think about generics as full classes. They are merely "templates". If you do a "specialize TFPGObjectList<SomeType>" the compiler will use the recorded declaration and implementation of the "TFPGObjectList", replace all occurences of the type "T" by "SomeType" and will parse the specialization as if you had written it like that yourself.

You'd need to check against your specialized "TMyGen" instead of "TFPGObjectList" then it would work.

In mode Delphi and my generic branch (I hope ^^) you are able to do it like this as well:

myV := TMyDerived.Create(False);
if myV is TFPGObjectList<TMyGen> then
  ...

Under the condition that "TMyDerived" is declared like in your previous mail.

Regards,
Sven

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

Reply via email to